dynamsoft-capture-vision-react-native 3.2.5002 → 3.4.1000

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 (61) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/cpp/JsiCore.cpp +19 -7
  3. package/android/src/main/cpp/JsiCvr.cpp +19 -14
  4. package/android/src/main/cpp/JsiDbr.cpp +62 -2
  5. package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
  6. package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
  7. package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
  8. package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
  9. package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
  10. package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
  11. package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
  12. package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
  13. package/android/src/main/dysJniLibsFor81/debug/arm64-v8a/librn_dys.so +0 -0
  14. package/android/src/main/dysJniLibsFor81/debug/armeabi-v7a/librn_dys.so +0 -0
  15. package/android/src/main/dysJniLibsFor81/debug/x86/librn_dys.so +0 -0
  16. package/android/src/main/dysJniLibsFor81/debug/x86_64/librn_dys.so +0 -0
  17. package/android/src/main/dysJniLibsFor81/release/arm64-v8a/librn_dys.so +0 -0
  18. package/android/src/main/dysJniLibsFor81/release/armeabi-v7a/librn_dys.so +0 -0
  19. package/android/src/main/dysJniLibsFor81/release/x86/librn_dys.so +0 -0
  20. package/android/src/main/dysJniLibsFor81/release/x86_64/librn_dys.so +0 -0
  21. package/android/src/main/dysJniLibsFor82/debug/arm64-v8a/librn_dys.so +0 -0
  22. package/android/src/main/dysJniLibsFor82/debug/armeabi-v7a/librn_dys.so +0 -0
  23. package/android/src/main/dysJniLibsFor82/debug/x86/librn_dys.so +0 -0
  24. package/android/src/main/dysJniLibsFor82/debug/x86_64/librn_dys.so +0 -0
  25. package/android/src/main/dysJniLibsFor82/release/arm64-v8a/librn_dys.so +0 -0
  26. package/android/src/main/dysJniLibsFor82/release/armeabi-v7a/librn_dys.so +0 -0
  27. package/android/src/main/dysJniLibsFor82/release/x86/librn_dys.so +0 -0
  28. package/android/src/main/dysJniLibsFor82/release/x86_64/librn_dys.so +0 -0
  29. package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +10 -2
  30. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +5 -2
  31. package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +11 -0
  32. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +15 -0
  33. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +37 -23
  34. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +42 -24
  35. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +28 -2
  36. package/dynamsoft-capture-vision-react-native.podspec +1 -1
  37. package/ios/CPP/ImageDataHostObject.cpp +1 -1
  38. package/ios/CPP/RNDynamsoft+JSI.mm +34 -1
  39. package/ios/CPP/RNDynamsoft+Json.m +25 -0
  40. package/ios/RNDynamsoftCameraViewManager.m +8 -1
  41. package/ios/RNDynamsoftCaptureVisionRouter.mm +21 -6
  42. package/ios/RNDynamsoftImageEditorViewManager.mm +11 -5
  43. package/ios/RNDynamsoftImageManager.h +2 -1
  44. package/ios/RNDynamsoftImageManager.mm +11 -5
  45. package/ios/RNDynamsoftImageSourceAdapter.h +2 -1
  46. package/ios/RNDynamsoftImageSourceAdapter.mm +12 -6
  47. package/ios/RNDynamsoftMultiCrossFilter.m +39 -0
  48. package/package.json +1 -16
  49. package/src/core/ImageData.tsx +4 -1
  50. package/src/core/ImageSourceAdapter.tsx +6 -0
  51. package/src/cvr/CaptureVisionRouter.tsx +37 -12
  52. package/src/dbr/BarcodeResultItem.tsx +9 -0
  53. package/src/dbr/ECISegment.tsx +24 -0
  54. package/src/dbr/index.tsx +1 -0
  55. package/src/dce/CameraEnhancer.tsx +10 -0
  56. package/src/dce/EnumResolution.tsx +1 -0
  57. package/src/dce/ImageEditorView.tsx +3 -0
  58. package/src/utility/CrossVerificationCriteria.tsx +12 -0
  59. package/src/utility/ImageManager.tsx +39 -0
  60. package/src/utility/MultiFrameResultCrossFilter.tsx +23 -0
  61. package/src/utility/index.tsx +1 -0
@@ -159,5 +159,5 @@ dependencies {
159
159
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
160
160
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
161
161
 
162
- implementation "com.dynamsoft:capturevisionbundle:3.2.5000"
162
+ implementation "com.dynamsoft:capturevisionbundle:3.4.1000"
163
163
  }
@@ -38,6 +38,8 @@ void jQuadToJsObject(Runtime &rt, JNIEnv *env, jobject jQuad, Object &jsQuad) {
38
38
  auto jPoints = (jobjectArray) env->GetObjectField(jQuad, points);
39
39
  if (!jPoints) {
40
40
  jsQuad.setProperty(rt, "points", Value::undefined());
41
+ env->DeleteLocalRef(jclsQuad);
42
+ return;
41
43
  }
42
44
  int count = env->GetArrayLength(jPoints);
43
45
  Array pointArr(rt, count);
@@ -50,6 +52,7 @@ void jQuadToJsObject(Runtime &rt, JNIEnv *env, jobject jQuad, Object &jsQuad) {
50
52
  }
51
53
  jsQuad.setProperty(rt, "points", std::move(pointArr));
52
54
  env->DeleteLocalRef(jclsQuad);
55
+ env->DeleteLocalRef(jPoints);
53
56
  }
54
57
 
55
58
  void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outType, Object &jsItem) {
@@ -71,7 +74,11 @@ void jCapturedItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, int &outTy
71
74
  jsItem.setProperty(rt, "targetROIDefName", pTargetROIDefName);
72
75
  if (jTaskName) {
73
76
  env->ReleaseStringUTFChars(jTaskName, pTaskName);
77
+ env->DeleteLocalRef(jTaskName);
78
+ }
79
+ if (jTargetROIDefName) {
74
80
  env->ReleaseStringUTFChars(jTargetROIDefName, pTargetROIDefName);
81
+ env->DeleteLocalRef(jTargetROIDefName);
75
82
  }
76
83
  env->DeleteLocalRef(clsCapturedResultItem);
77
84
 
@@ -98,12 +105,12 @@ void jCapturedItemArrayToJsArray(Runtime &rt, JNIEnv *env, jobjectArray jItemArr
98
105
  }
99
106
 
100
107
  jobject getJImageDataFromHO(JNIEnv *env, const ImageDataHostObject &imageDataHO) {
108
+ env->PushLocalFrame(8);
101
109
  jbyteArray jByteArr = nullptr;
102
110
  if (imageDataHO.buffer != nullptr) {
103
111
  jByteArr = env->NewByteArray((int) imageDataHO.bufferSize);
104
112
  env->SetByteArrayRegion(jByteArr, 0, (int) imageDataHO.bufferSize, (jbyte *) imageDataHO.buffer);
105
113
  }
106
- env->PushLocalFrame(4);
107
114
  jclass jclsImageData = env->FindClass("com/dynamsoft/core/basic_structures/ImageData");
108
115
  jmethodID initImageData = env->GetMethodID(jclsImageData, "<init>", "([BIIIIILcom/dynamsoft/core/basic_structures/ImageTag;)V");
109
116
  return env->PopLocalFrame(
@@ -162,14 +169,19 @@ Value imageDataHOToBase64(ImageDataHostObject &imageDataHO, Runtime &rt) {
162
169
 
163
170
  auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
164
171
  auto jBase64 = (jstring) env->CallStaticObjectMethod(cls, imageData2base64, jImageData);
165
- auto pBase64 = jBase64 ? env->GetStringUTFChars(jBase64, nullptr) : "";
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
+
166
180
  env->DeleteLocalRef(cls);
167
181
  env->DeleteLocalRef(jImageData);
168
- if (jBase64 != nullptr)
169
- env->ReleaseStringUTFChars(jBase64, pBase64);
170
182
  if (needDetach)
171
183
  gJvm->DetachCurrentThread();
172
- return String::createFromUtf8(rt, string(pBase64));
184
+ return String::createFromUtf8(rt, base64Str);
173
185
  }
174
186
 
175
187
  void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId) {
@@ -181,7 +193,7 @@ void addImageToBuffer(ImageDataHostObject &imageDataHO, string &nativeIsaId) {
181
193
  needDetach = true;
182
194
  }
183
195
 
184
- env->PushLocalFrame(4);
196
+ env->PushLocalFrame(8);
185
197
  jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
186
198
  jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
187
199
  jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
@@ -207,7 +219,7 @@ ImageDataHostObject getImage(string &nativeIsaId) {
207
219
  needDetach = true;
208
220
  }
209
221
 
210
- env->PushLocalFrame(4);
222
+ env->PushLocalFrame(8);
211
223
  jclass clsIsaModuleImpl = env->FindClass("com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl");
212
224
  jmethodID getISA =env->GetStaticMethodID(clsIsaModuleImpl, "getISA", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageSourceAdapter;");
213
225
  jobject jISA = env->CallStaticObjectMethod(clsIsaModuleImpl, getISA, env->NewStringUTF(nativeIsaId.c_str()));
@@ -23,6 +23,9 @@ extern "C"
23
23
  JNIEXPORT void JNICALL
24
24
  Java_com_dynamsoft_reactnativelib_cvr_CaptureVisionRouterModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
25
25
  if (!env->IsSameObject(jCvrModule, thiz)) {
26
+ if (jCvrModule) {
27
+ env->DeleteWeakGlobalRef(jCvrModule);
28
+ }
26
29
  jCvrModule = env->NewWeakGlobalRef(thiz);
27
30
  }
28
31
  auto runtime = reinterpret_cast<Runtime *>(jsiPtr);
@@ -33,7 +36,7 @@ Java_com_dynamsoft_reactnativelib_cvr_CaptureVisionRouterModuleImpl_nativeInstal
33
36
 
34
37
  namespace jsiConversion::cvr {
35
38
  void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResult, Object &jsCapturedResult) {
36
- env->PushLocalFrame(8);
39
+ env->PushLocalFrame(16);
37
40
  jclass jclsCapturedResult = env->FindClass("com/dynamsoft/cvr/CapturedResult");
38
41
  SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, originalImageHashId)
39
42
  SET_STRING_PROPERTY_BY_FIELD(jclsCapturedResult, jCapturedResult, jsCapturedResult, errorMessage)
@@ -56,13 +59,14 @@ void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResul
56
59
  }
57
60
  env->DeleteLocalRef(clsMatrix);
58
61
  env->DeleteLocalRef(jValues);
62
+ env->DeleteLocalRef(jMatrix);
59
63
  jsCapturedResult.setProperty(rt, "rotationTransformMatrix", jsMatrix);
60
64
  }
61
65
 
62
66
  jfieldID items = env->GetFieldID(jclsCapturedResult, "items", "[Lcom/dynamsoft/core/basic_structures/CapturedResultItem;");
63
67
  jobjectArray jItems = (jobjectArray) env->GetObjectField(jCapturedResult, items);
64
68
  Array jsItemArray(rt, 0);
65
- int *types;
69
+ int *types = nullptr;
66
70
 
67
71
  jsiConversion::core::jCapturedItemArrayToJsArray(rt, env, jItems, types, jsItemArray);
68
72
  for (int i = 0; i < jsItemArray.size(rt); ++i) {
@@ -84,7 +88,9 @@ void jCapturedResultToJsiObject(Runtime &rt, JNIEnv *env, jobject jCapturedResul
84
88
  }
85
89
  env->DeleteLocalRef(jItem);
86
90
  }
87
- delete types;
91
+ if(types) {
92
+ delete[] types;
93
+ }
88
94
  jsCapturedResult.setProperty(rt, "items", jsItemArray);
89
95
  env->PopLocalFrame(nullptr);
90
96
  }
@@ -174,6 +180,7 @@ Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string
174
180
  gJvm->AttachCurrentThread(&env, nullptr);
175
181
  needDetach = true;
176
182
  }
183
+ env->PushLocalFrame(16);
177
184
  auto clzCvrModule = env->GetObjectClass(jCvrModule);
178
185
  auto captureMeth = env->GetMethodID(clzCvrModule, "captureImageDataCalledInJSI",
179
186
  "(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
@@ -181,8 +188,7 @@ Object captureImageDataHO(ImageDataHostObject &imageDataHO, Runtime &rt, string
181
188
  auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, imageData, env->NewStringUTF(templateName.c_str()));
182
189
  Object jsResult(rt);
183
190
  jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
184
- env->DeleteLocalRef(clzCvrModule);
185
- env->DeleteLocalRef(imageData);
191
+ env->PopLocalFrame(nullptr);
186
192
  if (needDetach) {
187
193
  gJvm->DetachCurrentThread();
188
194
  }
@@ -197,13 +203,14 @@ Object captureFile(string filePath, Runtime &rt, string templateName) {
197
203
  gJvm->AttachCurrentThread(&env, nullptr);
198
204
  needDetach = true;
199
205
  }
206
+ env->PushLocalFrame(8);
200
207
  auto clzCvrModule = env->GetObjectClass(jCvrModule);
201
208
  auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileCalledInJSI",
202
209
  "(Ljava/lang/String;Ljava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
203
210
  auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, env->NewStringUTF(filePath.c_str()), env->NewStringUTF(templateName.c_str()));
204
211
  Object jsResult(rt);
205
212
  jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
206
- env->DeleteLocalRef(clzCvrModule);
213
+ env->PopLocalFrame(nullptr);
207
214
  if (needDetach) {
208
215
  gJvm->DetachCurrentThread();
209
216
  }
@@ -217,6 +224,7 @@ Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName
217
224
  gJvm->AttachCurrentThread(&env, nullptr);
218
225
  needDetach = true;
219
226
  }
227
+ env->PushLocalFrame(8);
220
228
  auto clzCvrModule = env->GetObjectClass(jCvrModule);
221
229
  auto captureMeth = env->GetMethodID(clzCvrModule, "captureFileBytesCalledInJSI",
222
230
  "([BLjava/lang/String;)Lcom/dynamsoft/cvr/CapturedResult;");
@@ -227,8 +235,7 @@ Object captureFileBytes(ArrayBuffer &fileBytes, Runtime &rt, string templateName
227
235
  auto jResult = env->CallObjectMethod(jCvrModule, captureMeth, jBytes, env->NewStringUTF(templateName.c_str()));
228
236
  Object jsResult(rt);
229
237
  jsiConversion::cvr::jCapturedResultToJsiObject(rt, env, jResult, jsResult);
230
- env->DeleteLocalRef(clzCvrModule);
231
- env->DeleteLocalRef(jBytes);
238
+ env->PopLocalFrame(nullptr);
232
239
  if (needDetach) {
233
240
  gJvm->DetachCurrentThread();
234
241
  }
@@ -260,8 +267,7 @@ Array getCurrentDeskewedImages(Runtime &runtime) {
260
267
  if (jCurrentImages) {
261
268
  env->DeleteLocalRef(jCurrentImages);
262
269
  }
263
- jCurrentImages = nullptr;
264
- env->SetObjectField(jCvrModule, fiCurrentImages, jCurrentImages);
270
+ env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
265
271
  if (needDetach) {
266
272
  gJvm->DetachCurrentThread();
267
273
  }
@@ -293,8 +299,7 @@ Array getCurrentEnhancedImages(Runtime &runtime) {
293
299
  if (jCurrentImages) {
294
300
  env->DeleteLocalRef(jCurrentImages);
295
301
  }
296
- jCurrentImages = nullptr;
297
- env->SetObjectField(jCvrModule, fiCurrentImages, jCurrentImages);
302
+ env->SetObjectField(jCvrModule, fiCurrentImages, nullptr);
298
303
  if (needDetach) {
299
304
  gJvm->DetachCurrentThread();
300
305
  }
@@ -309,6 +314,7 @@ ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
309
314
  gJvm->AttachCurrentThread(&env, nullptr);
310
315
  needDetach = true;
311
316
  }
317
+ env->PushLocalFrame(8);
312
318
  auto clzCvrModule = env->GetObjectClass(jCvrModule);
313
319
  auto getOriginalImageCalledInJSI =
314
320
  env->GetMethodID(clzCvrModule, "getOriginalImageCalledInJSI", "(Ljava/lang/String;)Lcom/dynamsoft/core/basic_structures/ImageData;");
@@ -316,9 +322,8 @@ ImageDataHostObject getOriginalImage(Runtime &runtime, string imageHashId) {
316
322
  ImageDataHostObject imgHO;
317
323
  if (jImageData != nullptr) {
318
324
  jsiConversion::core::getHOFromJImageData(env, jImageData, imgHO);
319
- env->DeleteLocalRef(jImageData);
320
325
  }
321
- env->DeleteLocalRef(clzCvrModule);
326
+ env->PopLocalFrame(nullptr);
322
327
  if (needDetach) {
323
328
  gJvm->DetachCurrentThread();
324
329
  }
@@ -27,13 +27,27 @@ namespace jsiConversion::dbr {
27
27
 
28
28
 
29
29
  void jBarcodeResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem) {
30
- env->PushLocalFrame(64);
30
+ env->PushLocalFrame(128);
31
31
  jclass clsItem = env->FindClass("com/dynamsoft/dbr/BarcodeResultItem");
32
32
  jmethodID getFormat = env->GetMethodID(clsItem, "getFormat", "()J");
33
33
  jsItem.setProperty(rt, "format", BigInt::fromInt64(rt, env->CallLongMethod(jItem, getFormat)));
34
34
 
35
35
  SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, formatString, getFormatString)
36
- SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, text, getText)
36
+
37
+ jmethodID getText = env->GetMethodID(clsItem, "getText", "()Ljava/lang/String;");
38
+ jstring jtext = (jstring) env->CallObjectMethod(jItem, getText);
39
+ if (jtext != nullptr) {
40
+ const jchar *ptext = env->GetStringChars(jtext, nullptr);
41
+ if (ptext != nullptr) {
42
+ jsize textLength = env->GetStringLength(jtext);
43
+ jsItem.setProperty(rt, "text", facebook::jsi::String::createFromUtf16(rt, reinterpret_cast<const char16_t *>(ptext), static_cast<size_t>(textLength)));
44
+ env->ReleaseStringChars(jtext, ptext);
45
+ } else {
46
+ jsItem.setProperty(rt, "text", "");
47
+ }
48
+ } else {
49
+ jsItem.setProperty(rt, "text", "");
50
+ }
37
51
 
38
52
  jmethodID getLocation = env->GetMethodID(clsItem, "getLocation", "()Lcom/dynamsoft/core/basic_structures/Quadrilateral;");
39
53
  Object jsQuad(rt);
@@ -55,6 +69,52 @@ namespace jsiConversion::dbr {
55
69
  jmethodID isDPM = env->GetMethodID(clsItem, "isDPM", "()Z");
56
70
  jsItem.setProperty(rt, "isDPM", (bool) env->CallBooleanMethod(jItem, isDPM));
57
71
 
72
+ jmethodID getBytes = env->GetMethodID(clsItem, "getBytes", "()[B");
73
+ jbyteArray jBytes = (jbyteArray) env->CallObjectMethod(jItem, getBytes);
74
+ if (jBytes != nullptr) {
75
+ jclass clsBase64 = env->FindClass("android/util/Base64");
76
+ jmethodID encodeMethod = env->GetStaticMethodID(clsBase64, "encodeToString", "([BI)Ljava/lang/String;");
77
+ jstring base64Str = (jstring) env->CallStaticObjectMethod(clsBase64, encodeMethod, jBytes, 2);
78
+ if (base64Str) {
79
+ const char *b64 = env->GetStringUTFChars(base64Str, nullptr);
80
+ if (b64) {
81
+ jsItem.setProperty(rt, "bytes", String::createFromUtf8(rt, b64));
82
+ env->ReleaseStringUTFChars(base64Str, b64);
83
+ }
84
+ env->DeleteLocalRef(base64Str);
85
+ }
86
+ env->DeleteLocalRef(clsBase64);
87
+ }
88
+
89
+ jmethodID getECISegments = env->GetMethodID(clsItem, "getECISegments", "()[Lcom/dynamsoft/dbr/ECISegment;");
90
+ jobjectArray jEciSegments = (jobjectArray) env->CallObjectMethod(jItem, getECISegments);
91
+ if (jEciSegments != nullptr) {
92
+ int eciSegments_len = env->GetArrayLength(jEciSegments);
93
+ Array jsEciSegments(rt, eciSegments_len);
94
+ jclass clsEciSegment = env->FindClass("com/dynamsoft/dbr/ECISegment");
95
+ jfieldID fi_eciValue = env->GetFieldID(clsEciSegment, "eciValue", "I");
96
+ jfieldID fi_startIndex = env->GetFieldID(clsEciSegment, "startIndex", "I");
97
+ jfieldID fi_length = env->GetFieldID(clsEciSegment, "length", "I");
98
+ jfieldID fi_charsetEncoding = env->GetFieldID(clsEciSegment, "charsetEncoding", "Ljava/lang/String;");
99
+ for (int i = 0; i < eciSegments_len; ++i) {
100
+ Object jsEciSegment(rt);
101
+ jobject jEciSegment = env->GetObjectArrayElement(jEciSegments, i);
102
+ jsEciSegment.setProperty(rt, "eciValue", env->GetIntField(jEciSegment, fi_eciValue));
103
+ jsEciSegment.setProperty(rt, "startIndex", env->GetIntField(jEciSegment, fi_startIndex));
104
+ jsEciSegment.setProperty(rt, "length", env->GetIntField(jEciSegment, fi_length));
105
+ auto jCharsetEncoding = (jstring) env->GetObjectField(jEciSegment, fi_charsetEncoding);
106
+ auto pCharsetEncoding = jCharsetEncoding ? env->GetStringUTFChars(jCharsetEncoding, nullptr) : "";
107
+ jsEciSegment.setProperty(rt, "charsetEncoding", pCharsetEncoding);
108
+ if (jCharsetEncoding) {
109
+ env->ReleaseStringUTFChars(jCharsetEncoding, pCharsetEncoding);
110
+ env->DeleteLocalRef(jCharsetEncoding);
111
+ }
112
+ jsEciSegments.setValueAtIndex(rt, i, std::move(jsEciSegment));
113
+ env->DeleteLocalRef(jEciSegment);
114
+ }
115
+ jsItem.setProperty(rt, "eciSegments", jsEciSegments);
116
+ }
117
+
58
118
  jmethodID getDetails = env->GetMethodID(clsItem, "getDetails", "()Lcom/dynamsoft/dbr/BarcodeDetails;");
59
119
  jobject jDetails = env->CallObjectMethod(jItem, getDetails);
60
120
  if (jDetails != nullptr) {
@@ -1,7 +1,5 @@
1
1
  package com.dynamsoft.reactnativelib
2
2
 
3
- import com.dynamsoft.cvr.CaptureVisionRouter
4
- import com.dynamsoft.cvr.CaptureVisionRouterException
5
3
  import com.dynamsoft.reactnativelib.cvr.CaptureVisionRouterModuleImpl
6
4
  import com.facebook.react.bridge.Promise
7
5
  import com.facebook.react.bridge.ReactApplicationContext
@@ -14,6 +12,16 @@ class CVRModule(reactApplicationContext: ReactApplicationContext) : ReactContext
14
12
 
15
13
  override fun getName(): String = impl.getName()
16
14
 
15
+ @ReactMethod(isBlockingSynchronousMethod = true)
16
+ fun createInstance(): Boolean {
17
+ return impl.createInstance()
18
+ }
19
+
20
+ @ReactMethod(isBlockingSynchronousMethod = true)
21
+ fun destroyInstance(): Boolean {
22
+ return impl.destroyInstance()
23
+ }
24
+
17
25
  @ReactMethod(isBlockingSynchronousMethod = true)
18
26
  fun install(): Boolean {
19
27
  return impl.install()
@@ -1,13 +1,11 @@
1
1
  package com.dynamsoft.reactnativelib
2
2
 
3
- import com.dynamsoft.dce.Feedback
4
3
  import com.dynamsoft.reactnativelib.dce.CameraEnhancerModuleImpl
5
4
  import com.facebook.react.bridge.Promise
6
5
  import com.facebook.react.bridge.ReactApplicationContext
7
6
  import com.facebook.react.bridge.ReactContextBaseJavaModule
8
7
  import com.facebook.react.bridge.ReactMethod
9
8
  import com.facebook.react.bridge.ReadableMap
10
- import com.facebook.react.bridge.WritableMap
11
9
 
12
10
  class DCEModule(reactApplicationContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactApplicationContext) {
13
11
  val impl = CameraEnhancerModuleImpl(reactApplicationContext)
@@ -19,6 +17,11 @@ class DCEModule(reactApplicationContext: ReactApplicationContext) : ReactContext
19
17
  return impl.createInstance()
20
18
  }
21
19
 
20
+ @ReactMethod(isBlockingSynchronousMethod = true)
21
+ fun destroyInstance(id: String): Boolean {
22
+ return impl.destroyInstance(id)
23
+ }
24
+
22
25
  @ReactMethod
23
26
  fun requestCameraPermission() {
24
27
  impl.requestCameraPermission()
@@ -5,6 +5,7 @@ import com.facebook.react.bridge.Promise
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.bridge.ReactContextBaseJavaModule
7
7
  import com.facebook.react.bridge.ReactMethod
8
+ import com.facebook.react.bridge.ReadableMap
8
9
 
9
10
  class MultiCrossFilterModule(reactApplicationContext: ReactApplicationContext) :
10
11
  ReactContextBaseJavaModule(reactApplicationContext) {
@@ -69,4 +70,14 @@ class MultiCrossFilterModule(reactApplicationContext: ReactApplicationContext) :
69
70
  impl.getMaxOverlappingFrames(filterId, type.toInt(), promise)
70
71
  }
71
72
 
73
+ @ReactMethod
74
+ fun setResultCrossVerificationCriteria(filterId: String, types: Int, criteria: ReadableMap) {
75
+ impl.setResultCrossVerificationCriteria(filterId, types, criteria)
76
+ }
77
+
78
+ @ReactMethod
79
+ fun getResultCrossVerificationCriteria(filterId: String, types: Int, promise: Promise) {
80
+ impl.getResultCrossVerificationCriteria(filterId, types, promise)
81
+ }
82
+
72
83
  }
@@ -1,12 +1,14 @@
1
1
  package com.dynamsoft.reactnativelib.basicutils
2
2
 
3
3
 
4
+ import android.util.Base64
4
5
  import com.dynamsoft.core.basic_structures.CapturedResultItem
5
6
  import com.dynamsoft.dbr.AztecDetails
6
7
  import com.dynamsoft.dbr.BarcodeDetails
7
8
  import com.dynamsoft.dbr.BarcodeResultItem
8
9
  import com.dynamsoft.dbr.DataMatrixDetails
9
10
  import com.dynamsoft.dbr.DecodedBarcodesResult
11
+ import com.dynamsoft.dbr.ECISegment
10
12
  import com.dynamsoft.dbr.OneDCodeDetails
11
13
  import com.dynamsoft.dbr.PDF417Details
12
14
  import com.dynamsoft.dbr.QRCodeDetails
@@ -23,6 +25,7 @@ fun BarcodeResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply
23
25
  putString("_formatNumberString", format.toULong().toString())
24
26
  putString("formatString", formatString)
25
27
  putString("text", text)
28
+ putString("bytes", Base64.encodeToString(bytes ?: byteArrayOf(), Base64.NO_WRAP))
26
29
  putMap("location", location.toWritableMap())
27
30
  putInt("confidence", confidence)
28
31
  putInt("angle", angle)
@@ -37,6 +40,7 @@ fun BarcodeResultItem.toWritableMap(): WritableMap = Arguments.createMap().apply
37
40
  is PDF417Details -> putMap("pdf417Details", details.toWritableMap())
38
41
  else -> Unit
39
42
  }
43
+ putArray("eciSegments", eciSegments?.toWritableArray())
40
44
  }
41
45
 
42
46
  fun Array<out BarcodeResultItem>.toWritableArray(): WritableArray = Arguments.createArray().apply {
@@ -140,3 +144,14 @@ fun BarcodeDetails.toWritableMap(): WritableMap = Arguments.createMap().apply {
140
144
  else -> Unit
141
145
  }
142
146
  }
147
+
148
+ fun Array<out ECISegment>.toWritableArray(): WritableArray = Arguments.createArray().apply {
149
+ forEach { pushMap(it.toWritableMap()) }
150
+ }
151
+
152
+ fun ECISegment.toWritableMap(): WritableMap = Arguments.createMap().apply {
153
+ putInt("eciValue", eciValue)
154
+ putString("charsetEncoding", charsetEncoding)
155
+ putInt("startIndex", startIndex)
156
+ putInt("length", length)
157
+ }