dynamsoft-capture-vision-react-native 3.0.3100 → 3.0.5100

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 (51) hide show
  1. package/android/build.gradle +55 -11
  2. package/android/src/main/cpp/CMakeLists.txt +22 -0
  3. package/android/src/main/cpp/ImgHO.cpp +95 -0
  4. package/android/src/main/cpp/ImgHO.h +34 -0
  5. package/android/src/main/cpp/JsiCore.cpp +284 -0
  6. package/android/src/main/cpp/JsiCore.h +51 -0
  7. package/android/src/main/cpp/JsiCvr.cpp +327 -0
  8. package/android/src/main/cpp/JsiCvr.h +54 -0
  9. package/android/src/main/cpp/JsiDbr.cpp +38 -0
  10. package/android/src/main/cpp/JsiDbr.h +26 -0
  11. package/android/src/main/cpp/JsiDce.cpp +59 -0
  12. package/android/src/main/cpp/JsiDce.h +17 -0
  13. package/android/src/main/cpp/JsiDcp.cpp +51 -0
  14. package/android/src/main/cpp/JsiDcp.h +31 -0
  15. package/android/src/main/cpp/JsiDdn.cpp +50 -0
  16. package/android/src/main/cpp/JsiDdn.h +28 -0
  17. package/android/src/main/cpp/JsiDlr.cpp +51 -0
  18. package/android/src/main/cpp/JsiDlr.h +26 -0
  19. package/android/src/main/cpp/JsiUtility.cpp +196 -0
  20. package/android/src/main/cpp/JsiUtility.h +16 -0
  21. package/android/src/main/cpp/RawBuffer.cpp +24 -0
  22. package/android/src/main/cpp/RawBuffer.h +24 -0
  23. package/android/src/main/cpp/android_log.h +14 -0
  24. package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
  25. package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
  26. package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
  27. package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
  28. package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
  29. package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
  30. package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
  31. package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
  32. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +10 -0
  33. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +2 -0
  34. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +21 -0
  35. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +3 -3
  36. package/dynamsoft-capture-vision-react-native.podspec +1 -1
  37. package/ios/RNDynamsoftCameraViewManager.m +5 -2
  38. package/ios/RNDynamsoftImageManager.mm +1 -1
  39. package/package.json +1 -1
  40. package/src/dce/CameraEnhancer.tsx +9 -0
  41. package/src/dce/EnumResolution.tsx +7 -0
  42. package/src/dce/NativeDynamsoftCameraViewModule.tsx +4 -0
  43. package/src/dce/index.tsx +1 -0
  44. package/android/src/main/jniLibs/debug/arm64-v8a/librn_dys.so +0 -0
  45. package/android/src/main/jniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
  46. package/android/src/main/jniLibs/debug/x86/librn_dys.so +0 -0
  47. package/android/src/main/jniLibs/debug/x86_64/librn_dys.so +0 -0
  48. package/android/src/main/jniLibs/release/arm64-v8a/librn_dys.so +0 -0
  49. package/android/src/main/jniLibs/release/armeabi-v7a/librn_dys.so +0 -0
  50. package/android/src/main/jniLibs/release/x86/librn_dys.so +0 -0
  51. package/android/src/main/jniLibs/release/x86_64/librn_dys.so +0 -0
@@ -0,0 +1,28 @@
1
+ //
2
+ // Created by Allen on 24/08/28.
3
+ //
4
+
5
+ #ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
6
+ #define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
7
+
8
+ #include "jni.h"
9
+ #include "jsi/jsi.h"
10
+ #include "JsiCore.h"
11
+
12
+ #define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
13
+ jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
14
+ jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName); \
15
+ const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
16
+ jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
17
+ if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
18
+
19
+ using namespace std;
20
+ using namespace facebook::jsi;
21
+
22
+ namespace jsiConversion::ddn {
23
+ void jDetectedQuadResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
24
+ void jDeskewedImageResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
25
+ void jEnhancedImageResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
26
+ }
27
+
28
+ #endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
@@ -0,0 +1,51 @@
1
+ //
2
+ // Created by Allen on 24/08/28.
3
+ //
4
+
5
+ #include "JsiDlr.h"
6
+
7
+ namespace jsiConversion::dlr {
8
+ void jTextLineResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem) {
9
+ env->PushLocalFrame(8);
10
+ jclass clsItem = env->FindClass("com/dynamsoft/dlr/TextLineResultItem");
11
+ jmethodID getLocation = env->GetMethodID(clsItem, "getLocation", "()Lcom/dynamsoft/core/basic_structures/Quadrilateral;");
12
+ Object jsQuad(rt);
13
+ jsiConversion::core::jQuadToJsObject(rt, env, env->CallObjectMethod(jItem, getLocation), jsQuad);
14
+ jsItem.setProperty(rt, "location", jsQuad);
15
+
16
+ jmethodID getConfidence = env->GetMethodID(clsItem, "getConfidence", "()I");
17
+ jsItem.setProperty(rt, "confidence", env->CallIntMethod(jItem, getConfidence));
18
+
19
+ SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, text, getText)
20
+ SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, specificationName, getSpecificationName)
21
+
22
+ jmethodID getCharacterResults = env->GetMethodID(clsItem, "getCharacterResults", "()[Lcom/dynamsoft/dlr/CharacterResult;");
23
+ auto jCharacterResults = (jobjectArray) env->CallObjectMethod(jItem, getCharacterResults);
24
+ int count = jCharacterResults ? env->GetArrayLength(jCharacterResults) : 0;
25
+ Array jsCharacterResultArray = Array(rt, count);
26
+ for (int i = 0; i < count; ++i) {
27
+ Object jsCharacterResult(rt);
28
+ auto jCharRes = env->GetObjectArrayElement(jCharacterResults, i);
29
+ jCharacterResultToJsObject(rt, env, jCharRes, jsCharacterResult);
30
+ env->DeleteLocalRef(jCharRes);
31
+ jsCharacterResultArray.setValueAtIndex(rt, i, jsCharacterResult);
32
+ }
33
+ env->PopLocalFrame(nullptr);
34
+ }
35
+ void jCharacterResultToJsObject(Runtime &rt, JNIEnv *env, jobject jCharRes, Object &jsCharRes) {
36
+ jclass clsResult = env->FindClass("com/dynamsoft/dlr/CharacterResult");
37
+ jfieldID characterH = env->GetFieldID(clsResult, "characterH", "C");
38
+ jfieldID characterM = env->GetFieldID(clsResult, "characterM", "C");
39
+ jfieldID characterL = env->GetFieldID(clsResult, "characterL", "C");
40
+ jsCharRes.setProperty(rt, "characterH", std::to_string(env->GetCharField(jCharRes, characterH)));
41
+ jsCharRes.setProperty(rt, "characterM", std::to_string(env->GetCharField(jCharRes, characterM)));
42
+ jsCharRes.setProperty(rt, "characterL", std::to_string(env->GetCharField(jCharRes, characterL)));
43
+
44
+ jfieldID characterHConfidence = env->GetFieldID(clsResult, "characterHConfidence", "I");
45
+ jfieldID characterMConfidence = env->GetFieldID(clsResult, "characterMConfidence", "I");
46
+ jfieldID characterLConfidence = env->GetFieldID(clsResult, "characterLConfidence", "I");
47
+ jsCharRes.setProperty(rt, "characterHConfidence", env->GetIntField(jCharRes, characterHConfidence));
48
+ jsCharRes.setProperty(rt, "characterMConfidence", env->GetIntField(jCharRes, characterMConfidence));
49
+ jsCharRes.setProperty(rt, "characterLConfidence", env->GetIntField(jCharRes, characterLConfidence));
50
+ }
51
+ }//namespace jsiConversion::dlr
@@ -0,0 +1,26 @@
1
+ //
2
+ // Created by Allen on 24/08/28.
3
+ //
4
+
5
+ #ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DLR_JSIDLR_H_
6
+ #define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DLR_JSIDLR_H_
7
+
8
+ #include "jni.h"
9
+ #include "jsi/jsi.h"
10
+ #include "JsiCore.h"
11
+
12
+ #define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
13
+ jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
14
+ jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName); \
15
+ const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
16
+ jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
17
+ if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
18
+
19
+ using namespace std;
20
+ using namespace facebook::jsi;
21
+
22
+ namespace jsiConversion::dlr {
23
+ void jTextLineResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
24
+ void jCharacterResultToJsObject(Runtime &rt, JNIEnv *env, jobject jCharRes, Object &jsCharRes);
25
+ }
26
+ #endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DLR_JSIDLR_H_
@@ -0,0 +1,196 @@
1
+ //
2
+ // Created by Allen on 24/09/23.
3
+ //
4
+
5
+ #include "JsiUtility.h"
6
+ jobject jImageManagerModule = nullptr;
7
+ jclass jclzQuad = nullptr;
8
+ jclass jclzPoint = nullptr;
9
+
10
+ jobject jsPointToJobject(Runtime &rt, JNIEnv *env, Object jsPoint) {
11
+ if(jsPoint.hasProperty(rt,"x") && jsPoint.hasProperty(rt,"y")) {
12
+ int x = jsPoint.getProperty(rt,"x").asNumber();
13
+ int y = jsPoint.getProperty(rt,"y").asNumber();
14
+ jmethodID init = env->GetMethodID(jclzPoint, "<init>", "(II)V");
15
+ jobject jPoint = env->NewObject(jclzPoint, init, x, y);
16
+ return jPoint;
17
+ }
18
+ return nullptr;
19
+ }
20
+
21
+ jobject jsQuadToJobject(Runtime &rt, JNIEnv *env, Object &jsQuad) {
22
+ if(jsQuad.hasProperty(rt,"points")) {
23
+ auto jsPoints = jsQuad.getProperty(rt,"points").asObject(rt).asArray(rt);
24
+ int count = jsPoints.length(rt);
25
+ auto jPoints = env->NewObjectArray(count, jclzPoint, nullptr);
26
+ for (int i = 0; i < count; ++i) {
27
+ auto jPoint = jsPointToJobject(rt, env, jsPoints.getValueAtIndex(rt, i).asObject(rt));
28
+ env->SetObjectArrayElement(jPoints, i, jPoint);
29
+ env->DeleteLocalRef(jPoint);
30
+ }
31
+ auto initQuad = env->GetMethodID(jclzQuad, "<init>", "()V");
32
+ auto fieldId_points = env->GetFieldID(jclzQuad, "points", "[Landroid/graphics/Point;");
33
+ auto jQuad = env->NewObject(jclzQuad, initQuad);
34
+ env->SetObjectField(jQuad, fieldId_points, jPoints);
35
+ return jQuad;
36
+ }
37
+ return nullptr;
38
+ }
39
+
40
+ jobjectArray jsQuadArrayToJobjectArray(Runtime &rt, JNIEnv *env, Array &jsQuads) {
41
+ int count = jsQuads.length(rt);
42
+ jobjectArray jQuads = env->NewObjectArray(count, jclzQuad, nullptr);
43
+ for (int i = 0; i < count; ++i) {
44
+ auto jsQuad = jsQuads.getValueAtIndex(rt, i).asObject(rt);
45
+ auto jQuad = jsQuadToJobject(rt, env, jsQuad);
46
+ env->SetObjectArrayElement(jQuads, i, jQuad);
47
+ env->DeleteLocalRef(jQuad);
48
+ }
49
+ return jQuads;
50
+ }
51
+
52
+ void saveImageDataHOToFile(Runtime &rt, ImageDataHostObject &imageDataHO, string filePath, bool overWrite) {
53
+ JNIEnv *env;
54
+ bool needDetach = false;
55
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
56
+ if (state == JNI_EDETACHED || env == nullptr) {
57
+ gJvm->AttachCurrentThread(&env, nullptr);
58
+ needDetach = true;
59
+ }
60
+ jclass clz = env->GetObjectClass(jImageManagerModule);
61
+ jmethodID methodId = env->GetMethodID(clz, "saveToFileCalledInJsi", "(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;Z)V");
62
+ auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
63
+ env->CallVoidMethod(jImageManagerModule, methodId, jImageData, env->NewStringUTF(filePath.c_str()), overWrite);
64
+ env->DeleteLocalRef(clz);
65
+ env->DeleteLocalRef(jImageData);
66
+ if (needDetach) {
67
+ gJvm->DetachCurrentThread();
68
+ }
69
+ }
70
+
71
+ ImageDataHostObject drawOnImage(Runtime &rt, ImageDataHostObject &imageDataHO, Array &jsQuads, int color, int thickness) {
72
+ JNIEnv *env;
73
+ bool needDetach = false;
74
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
75
+ if (state == JNI_EDETACHED || env == nullptr) {
76
+ gJvm->AttachCurrentThread(&env, nullptr);
77
+ needDetach = true;
78
+ }
79
+ jclass clz = env->GetObjectClass(jImageManagerModule);
80
+ jmethodID methodId = env->GetMethodID(clz, "drawOnImageCalledInJsi",
81
+ "(Lcom/dynamsoft/core/basic_structures/ImageData;[Lcom/dynamsoft/core/basic_structures/Quadrilateral;II)Lcom/dynamsoft/core/basic_structures/ImageData;");
82
+ auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
83
+ auto jQuads = jsQuadArrayToJobjectArray(rt, env, jsQuads);
84
+ auto jImageDataAfterDraw = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, jQuads, color, thickness);
85
+ ImageDataHostObject imageHOAfterDraw;
86
+ jsiConversion::core::getHOFromJImageData(env, jImageDataAfterDraw, imageHOAfterDraw);
87
+ env->DeleteLocalRef(jQuads);
88
+ env->DeleteLocalRef(jImageDataAfterDraw);
89
+ env->DeleteLocalRef(clz);
90
+ env->DeleteLocalRef(jImageData);
91
+ if (needDetach) {
92
+ gJvm->DetachCurrentThread();
93
+ }
94
+ return imageHOAfterDraw;
95
+ }
96
+
97
+ ImageDataHostObject cropImage(Runtime &rt, ImageDataHostObject &imageDataHO, Object &jsQuad) {
98
+ JNIEnv *env;
99
+ bool needDetach = false;
100
+ int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
101
+ if (state == JNI_EDETACHED || env == nullptr) {
102
+ gJvm->AttachCurrentThread(&env, nullptr);
103
+ needDetach = true;
104
+ }
105
+ jclass clz = env->GetObjectClass(jImageManagerModule);
106
+ jmethodID methodId = env->GetMethodID(clz, "cropImageCalledInJsi",
107
+ "(Lcom/dynamsoft/core/basic_structures/ImageData;Lcom/dynamsoft/core/basic_structures/Quadrilateral;)Lcom/dynamsoft/core/basic_structures/ImageData;");
108
+ auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
109
+ auto jQuad = jsQuadToJobject(rt, env, jsQuad);
110
+ auto jImageDataAfterCrop = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, jQuad);
111
+ ImageDataHostObject imageHOAfterCrop;
112
+ jsiConversion::core::getHOFromJImageData(env, jImageDataAfterCrop, imageHOAfterCrop);
113
+ env->DeleteLocalRef(jQuad);
114
+ env->DeleteLocalRef(jImageDataAfterCrop);
115
+ env->DeleteLocalRef(clz);
116
+ env->DeleteLocalRef(jImageData);
117
+ if (needDetach) {
118
+ gJvm->DetachCurrentThread();
119
+ }
120
+ return imageHOAfterCrop;
121
+ }
122
+
123
+
124
+ #define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
125
+
126
+ namespace jsi_install::utility {
127
+ void install_imageManager_saveToFile(Runtime &jsiRuntime) {
128
+ auto nameID = PropNameID::forAscii(jsiRuntime, "imageManager_saveToFile");
129
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
130
+ auto saveToFileFcn = Function::createFromHostFunction(jsiRuntime, nameID, 3, JSI_FUNC {
131
+ auto imageDataObj = arguments[0].asObject(runtime);
132
+ auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
133
+ auto filePath = arguments[1].asString(runtime).utf8(runtime);
134
+ bool overWrite = arguments[2].asBool();
135
+ saveImageDataHOToFile(runtime, imageDataHostObject, filePath, overWrite);
136
+ return {};
137
+ });
138
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(saveToFileFcn));
139
+ }
140
+ }
141
+ void install_imageManager_drawOnImage(Runtime &jsiRuntime){
142
+ auto nameID = PropNameID::forAscii(jsiRuntime, "imageManager_drawOnImage");
143
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
144
+ auto drawOnImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 4, JSI_FUNC {
145
+ auto imageDataObj = arguments[0].asObject(runtime);
146
+ auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
147
+ auto jsQuads = arguments[1].asObject(runtime).asArray(runtime);
148
+ auto color = arguments[2].asNumber();
149
+ auto thickness = arguments[3].asNumber();
150
+ ImageDataHostObject imageHOAfterDraw = drawOnImage(runtime, imageDataHostObject, jsQuads, (int) color, (int) thickness);
151
+ return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterDraw));
152
+ });
153
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(drawOnImageFcn));
154
+ }
155
+ }
156
+
157
+ void install_imageManager_cropImage(Runtime &jsiRuntime){
158
+ auto nameID = PropNameID::forAscii(jsiRuntime, "imageManager_cropImage");
159
+ if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
160
+ auto cropImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 4, JSI_FUNC {
161
+ auto imageDataObj = arguments[0].asObject(runtime);
162
+ auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
163
+ auto jsQuads = arguments[1].asObject(runtime);
164
+ ImageDataHostObject imageHOAfterCrop = cropImage(runtime, imageDataHostObject, jsQuads);
165
+ if(imageHOAfterCrop.buffer == nullptr) {
166
+ return Value::undefined();
167
+ }
168
+ return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterCrop));
169
+ });
170
+ jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(cropImageFcn));
171
+ }
172
+ }
173
+ }//namespace jsi_install::dce
174
+
175
+ void install_imageManager_methods(Runtime &jsiRuntime) {
176
+ jsi_install::utility::install_imageManager_saveToFile(jsiRuntime);
177
+ jsi_install::utility::install_imageManager_drawOnImage(jsiRuntime);
178
+ jsi_install::utility::install_imageManager_cropImage(jsiRuntime);
179
+ }
180
+
181
+
182
+ extern "C"
183
+ JNIEXPORT void JNICALL
184
+ Java_com_dynamsoft_reactnativelib_utility_ImageManagerModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
185
+ if (!env->IsSameObject(jImageManagerModule, thiz)) {
186
+ jImageManagerModule = env->NewWeakGlobalRef(thiz);
187
+ }
188
+ if(jclzQuad == nullptr) {
189
+ jclzQuad = (jclass) env->NewWeakGlobalRef(env->FindClass("com/dynamsoft/core/basic_structures/Quadrilateral"));
190
+ }
191
+ if(jclzPoint == nullptr) {
192
+ jclzPoint = (jclass) env->NewWeakGlobalRef(env->FindClass("android/graphics/Point"));
193
+ }
194
+ auto rt = reinterpret_cast<Runtime *>(jsiPtr);
195
+ install_imageManager_methods(*rt);
196
+ }
@@ -0,0 +1,16 @@
1
+ //
2
+ // Created by Allen on 24/09/23.
3
+ //
4
+
5
+ #ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
6
+ #define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
7
+ #include "JsiCore.h"
8
+
9
+
10
+ namespace jsi_install::utility {
11
+ void install_imageManager_saveToFile(Runtime &jsiRuntime);
12
+ void install_imageManager_drawOnImage(Runtime &jsiRuntime);
13
+ void install_imageManager_cropImage(Runtime &jsiRuntime);
14
+ }//namespace jsi_install::dce
15
+
16
+ #endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
@@ -0,0 +1,24 @@
1
+ //
2
+ // Created by Allen on 24/08/26.
3
+ //
4
+
5
+
6
+ #include "RawBuffer.h"
7
+
8
+ MutableRawBuffer::MutableRawBuffer(uint8_t* data, size_t size, bool freeOnDealloc)
9
+ : _data(data), _size(size), _freeOnDealloc(freeOnDealloc) {}
10
+
11
+ MutableRawBuffer::~MutableRawBuffer() {
12
+ if (_freeOnDealloc && _data != nullptr) {
13
+ free(_data);
14
+ _data = nullptr;
15
+ }
16
+ }
17
+
18
+ size_t MutableRawBuffer::size() const {
19
+ return _size;
20
+ }
21
+
22
+ uint8_t* MutableRawBuffer::data() {
23
+ return _data;
24
+ }
@@ -0,0 +1,24 @@
1
+ //
2
+ // Created by Allen on 24/08/26.
3
+ //
4
+
5
+ #ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_MUTABLERAWBUFFER_H_
6
+ #define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_MUTABLERAWBUFFER_H_
7
+
8
+
9
+ #include <jsi/jsi.h>
10
+ using namespace facebook::jsi;
11
+
12
+ class MutableRawBuffer : public MutableBuffer {
13
+ public:
14
+ MutableRawBuffer(uint8_t* data, size_t size, bool freeOnDealloc);
15
+ ~MutableRawBuffer() override;
16
+
17
+ uint8_t* data() override;
18
+ [[nodiscard]] size_t size() const override;
19
+ uint8_t* _data;
20
+ size_t _size;
21
+ bool _freeOnDealloc;
22
+ };
23
+
24
+ #endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_MUTABLERAWBUFFER_H_
@@ -0,0 +1,14 @@
1
+ //
2
+ // Created by Allen on 24/05/15.
3
+ //
4
+
5
+ #ifndef DYNAMSOFT_CORE_REACT_NATIVE_ANDROID_SRC_MAIN_CPP_ANDROID_LOG_H_
6
+ #define DYNAMSOFT_CORE_REACT_NATIVE_ANDROID_SRC_MAIN_CPP_ANDROID_LOG_H_
7
+
8
+ #include "android/log.h"
9
+ #define LOG_TAG "Dynamsoft RN JNI"
10
+ #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
11
+ #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
12
+ #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
13
+
14
+ #endif //DYNAMSOFT_CORE_REACT_NATIVE_ANDROID_SRC_MAIN_CPP_ANDROID_LOG_H_
@@ -99,6 +99,16 @@ class DCEModule(reactApplicationContext: ReactApplicationContext) : ReactContext
99
99
  impl.turnOffTorch()
100
100
  }
101
101
 
102
+ @ReactMethod
103
+ fun setResolution(resolution: Int) {
104
+ impl.setResolution(resolution)
105
+ }
106
+
107
+ @ReactMethod
108
+ fun getResolution(promise: Promise) {
109
+ impl.getResolution(promise)
110
+ }
111
+
102
112
  @ReactMethod
103
113
  fun beep() {
104
114
  impl.beep()
@@ -63,6 +63,8 @@ class CaptureVisionRouterModuleImpl(private val reactContext: ReactApplicationCo
63
63
  },
64
64
  onProcessedDocumentResultReceived_Event to object : CapturedResultReceiver {
65
65
  override fun onProcessedDocumentResultReceived(result: ProcessedDocumentResult) {
66
+ currentDeskewedImages = result.deskewedImageResultItems.map { (it as DeskewedImageResultItem).imageData }.toTypedArray()
67
+ currentEnhancedImages = result.enhancedImageResultItems.map { (it as EnhancedImageResultItem).imageData }.toTypedArray()
66
68
  emitResultAndWaitForResponse(onProcessedDocumentResultReceived_Event, result.toWritableMap())
67
69
  }
68
70
  },
@@ -2,16 +2,19 @@ package com.dynamsoft.reactnativelib.dce
2
2
 
3
3
  import android.graphics.PointF
4
4
  import android.util.Log
5
+ import android.util.Size
5
6
  import androidx.lifecycle.Lifecycle
6
7
  import com.dynamsoft.dce.CameraEnhancer
7
8
  import com.dynamsoft.dce.CameraView
8
9
  import com.dynamsoft.dce.EnumCameraPosition
9
10
  import com.dynamsoft.dce.EnumFocusMode
11
+ import com.dynamsoft.dce.EnumResolution
10
12
  import com.dynamsoft.dce.Feedback
11
13
  import com.dynamsoft.dce.utils.PermissionUtil
12
14
  import com.dynamsoft.reactnativelib.core.ImageSourceAdapterModuleImpl.Companion.mapISA
13
15
  import com.dynamsoft.reactnativelib.utils.toScanRegion
14
16
  import com.dynamsoft.reactnativelib.utils.toWritableMap
17
+ import com.facebook.react.bridge.Arguments
15
18
  import com.facebook.react.bridge.LifecycleEventListener
16
19
  import com.facebook.react.bridge.Promise
17
20
  import com.facebook.react.bridge.ReactApplicationContext
@@ -158,6 +161,24 @@ class CameraEnhancerModuleImpl(private val reactContext: ReactApplicationContext
158
161
  camera.turnOffTorch()
159
162
  }
160
163
 
164
+
165
+ @ReactMethod
166
+ fun setResolution(resolution: Int) {
167
+ if(resolution == 4) {
168
+ camera.setResolution(EnumResolution.RESOLUTION_4K)
169
+ } else {
170
+ camera.setResolution(resolution)
171
+ }
172
+ }
173
+ @ReactMethod
174
+ fun getResolution(promise: Promise) {
175
+ val resolution = camera.getResolution() ?: Size(0,0)
176
+ promise.resolve(Arguments.createMap().apply {
177
+ putInt("width", resolution.width)
178
+ putInt("height", resolution.height)
179
+ })
180
+ }
181
+
161
182
  @ReactMethod
162
183
  fun beep() {
163
184
  Feedback.beep()
@@ -35,10 +35,10 @@ class ImageManagerModuleImpl(private val reactContext: ReactApplicationContext)
35
35
  }
36
36
 
37
37
  fun cropImageCalledInJsi(imageData: ImageData, quad: Quadrilateral): ImageData? {
38
- try {
39
- return imageProcessor.cropImage(imageData, quad)
38
+ return try {
39
+ imageProcessor.cropAndDeskewImage(imageData, quad)
40
40
  } catch (e: UtilityException) {
41
- return null;
41
+ null;
42
42
  }
43
43
  }
44
44
 
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
17
17
  s.private_header_files = "ios/**/*.h"
18
18
  s.requires_arc = true
19
19
 
20
- s.dependency "DynamsoftCaptureVisionBundle", ">= 3.0.3000", "< 4.0"
20
+ s.dependency "DynamsoftCaptureVisionBundle", ">= 3.0.5100", "< 4.0"
21
21
 
22
22
  install_modules_dependencies(s)
23
23
  end
@@ -84,8 +84,7 @@ RCT_EXPORT_METHOD(setCameraView:(nonnull NSNumber *)tag) {
84
84
  }
85
85
 
86
86
  RCT_EXPORT_METHOD(selectCamera:(NSInteger)position) {
87
- NSError *error;
88
- [self.dce selectCameraWithPosition:position error:&error];
87
+ [self.dce selectCameraWithPosition:position completion:nil];
89
88
  }
90
89
 
91
90
  RCT_EXPORT_METHOD(getCameraPosition:(RCTPromiseResolveBlock)resolve
@@ -176,4 +175,8 @@ RCT_EXPORT_METHOD(vibrate) {
176
175
  [DSFeedback vibrate];
177
176
  }
178
177
 
178
+ RCT_EXPORT_METHOD(setResolution:(NSInteger)resolution) {
179
+ [self.dce setResolution:resolution];
180
+ }
181
+
179
182
  @end
@@ -136,7 +136,7 @@ static void install(jsi::Runtime &jsiRuntime, RNDynamsoftImageManager *rnManager
136
136
  Object obj = arguments[1].getObject(runtime);
137
137
  DSQuadrilateral *quad = convertJSIValueToDSQuadrilateral(runtime, obj);
138
138
  NSError *error;
139
- DSImageData *imageData = [rnManager.processor cropImage:data quad:quad error:&error];
139
+ DSImageData *imageData = [rnManager.processor cropAndDeskewImage:data quad:quad error:&error];
140
140
  ImageDataHostObject outImageData = [imageData hostObject];
141
141
  Object outObj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(outImageData));
142
142
  return outObj;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dynamsoft-capture-vision-react-native",
3
3
  "title": "Dynamsoft Capture Vision React Native",
4
- "version": "3.0.3100",
4
+ "version": "3.0.5100",
5
5
  "description": "The Dynamsoft Capture Vision React Native SDK provides a wrapper for building barcode scanning, document scanning and MRZ scanning applications with React Native.",
6
6
  "homepage": "https://github.com/Dynamsoft/capture-vision-react-native-samples",
7
7
  "main": "src/index.tsx",
@@ -4,6 +4,7 @@ import {CameraView} from "./CameraView"
4
4
  import type {EnumCameraPosition} from "./EnumCameraPosition";
5
5
  import type {EnumFocusMode} from "./EnumFocusMode";
6
6
  import type {EnumEnhancedFeatures} from "./EnumEnhancedFeatures";
7
+ import type {EnumResolution} from "./EnumResolution";
7
8
 
8
9
  // @ts-ignore Check whether __turboModuleProxy exists, it may not
9
10
  const isTurboModuleEnabled = global.__turboModuleProxy != null;
@@ -220,6 +221,14 @@ export class CameraEnhancer extends ImageSourceAdapter {
220
221
  DynamsoftCameraEnhancerModule.turnOffTorch()
221
222
  }
222
223
 
224
+ /**
225
+ * Set the resolution of the camera.
226
+ * @param resolution - One of the {@link EnumResolution}.
227
+ * */
228
+ setResolution(resolution: EnumResolution) {
229
+ DynamsoftCameraEnhancerModule.setResolution(resolution);
230
+ }
231
+
223
232
  destroy() {
224
233
  this.close()
225
234
  super.destroy();
@@ -0,0 +1,7 @@
1
+ export enum EnumResolution {
2
+ RESOLUTION_AUTO = 0,
3
+ RESOLUTION_480P = 1,
4
+ RESOLUTION_720P = 2,
5
+ Resolution1080P = 3,
6
+ RESOLUTION_4K = 4,
7
+ }
@@ -35,6 +35,10 @@ export interface Spec extends TurboModule {
35
35
 
36
36
  turnOffTorch(): void;
37
37
 
38
+ setResolution(resolution: number): void;
39
+
40
+ getResolution(): Promise<unknown>;
41
+
38
42
  beep(): void;
39
43
 
40
44
  vibrate(): void;
package/src/dce/index.tsx CHANGED
@@ -8,5 +8,6 @@ export * from "./EnumFocusMode"
8
8
  export * from "./EnumTorchState"
9
9
  export * from "./FeedBack"
10
10
  export * from "./ImageEditorView"
11
+ export * from "./EnumResolution"
11
12
  export type {CameraViewNativeProps} from "./DynamsoftCameraViewNativeComponent"
12
13
  export type {ImageEditorViewNativeProps} from "./DynamsoftImageEditorViewNativeComponent"