Skip to content

Commit 2dcdd92

Browse files
Merge pull request #87 from lukaszkurantdev/feat/add-object-to-vector
Add object to vector
2 parents 07975de + 90c46a6 commit 2dcdd92

30 files changed

+3094
-1642
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,5 @@ lib/
8080
.yarn/cache/*
8181
docs/.yarn
8282
.next
83-
docs/out/*
83+
docs/out/*
84+
.kotlin/

cpp/FOCV_Function.cpp

Lines changed: 130 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,48 @@ jsi::Object FOCV_Function::invoke(jsi::Runtime& runtime, const jsi::Value* argum
9393
cv::batchDistance(*src1, *src2, *dist, dtype, *nidx, normType, K, *mask, update, crosscheck);
9494
} break;
9595
case hashString("bitwise_and", 11): {
96-
auto src1 = args.asMatPtr(1);
97-
auto src2 = args.asMatPtr(2);
9896
auto dst = args.asMatPtr(3);
9997

100-
if (count > 4) {
101-
auto mask = args.asMatPtr(4);
98+
if (args.isMat(1)) {
99+
auto src1 = args.asMatPtr(1);
102100

103-
cv::bitwise_and(*src1, *src2, *dst, *mask);
104-
break;
101+
if(args.isScalar(2)) {
102+
auto src2 = args.asScalarPtr(2);
103+
cv::bitwise_and(*src1, *src2, *dst);
104+
105+
if (count > 4) {
106+
auto mask = args.asMatPtr(4);
107+
108+
cv::bitwise_and(*src1, *src2, *dst, *mask);
109+
break;
110+
}
111+
112+
} else {
113+
auto src2 = args.asMatPtr(2);
114+
115+
if (count > 4) {
116+
auto mask = args.asMatPtr(4);
117+
118+
cv::bitwise_and(*src1, *src2, *dst, *mask);
119+
break;
120+
}
121+
122+
cv::bitwise_and(*src1, *src2, *dst);
123+
}
124+
} else {
125+
auto src1 = args.asScalarPtr(1);
126+
auto src2 = args.asMatPtr(2);
127+
128+
129+
if (count > 4) {
130+
auto mask = args.asMatPtr(4);
131+
132+
cv::bitwise_and(*src1, *src2, *dst, *mask);
133+
break;
134+
}
135+
136+
cv::bitwise_and(*src1, *src2, *dst);
105137
}
106-
cv::bitwise_and(*src1, *src2, *dst);
107138
} break;
108139
case hashString("bitwise_not", 11): {
109140
auto src = args.asMatPtr(1);
@@ -118,30 +149,90 @@ jsi::Object FOCV_Function::invoke(jsi::Runtime& runtime, const jsi::Value* argum
118149
cv::bitwise_not(*src, *dst);
119150
} break;
120151
case hashString("bitwise_or", 10): {
121-
auto src1 = args.asMatPtr(1);
122-
auto src2 = args.asMatPtr(2);
123152
auto dst = args.asMatPtr(3);
124153

125-
if (count > 4) {
126-
auto mask = args.asMatPtr(4);
154+
if (args.isMat(1)) {
155+
auto src1 = args.asMatPtr(1);
127156

128-
cv::bitwise_or(*src1, *src2, *dst, *mask);
129-
break;
157+
if(args.isScalar(2)) {
158+
auto src2 = args.asScalarPtr(2);
159+
cv::bitwise_or(*src1, *src2, *dst);
160+
161+
if (count > 4) {
162+
auto mask = args.asMatPtr(4);
163+
164+
cv::bitwise_or(*src1, *src2, *dst, *mask);
165+
break;
166+
}
167+
168+
} else {
169+
auto src2 = args.asMatPtr(2);
170+
171+
if (count > 4) {
172+
auto mask = args.asMatPtr(4);
173+
174+
cv::bitwise_or(*src1, *src2, *dst, *mask);
175+
break;
176+
}
177+
178+
cv::bitwise_or(*src1, *src2, *dst);
179+
}
180+
} else {
181+
auto src1 = args.asScalarPtr(1);
182+
auto src2 = args.asMatPtr(2);
183+
184+
if (count > 4) {
185+
auto mask = args.asMatPtr(4);
186+
187+
cv::bitwise_or(*src1, *src2, *dst, *mask);
188+
break;
189+
}
190+
191+
cv::bitwise_or(*src1, *src2, *dst);
130192
}
131-
cv::bitwise_or(*src1, *src2, *dst);
132193
} break;
133194
case hashString("bitwise_xor", 11): {
134-
auto src1 = args.asMatPtr(1);
135-
auto src2 = args.asMatPtr(2);
136195
auto dst = args.asMatPtr(3);
137196

138-
if (count > 4) {
139-
auto mask = args.asMatPtr(4);
197+
if (args.isMat(1)) {
198+
auto src1 = args.asMatPtr(1);
140199

141-
cv::bitwise_xor(*src1, *src2, *dst, *mask);
142-
break;
200+
if(args.isScalar(2)) {
201+
auto src2 = args.asScalarPtr(2);
202+
cv::bitwise_xor(*src1, *src2, *dst);
203+
204+
if (count > 4) {
205+
auto mask = args.asMatPtr(4);
206+
207+
cv::bitwise_xor(*src1, *src2, *dst, *mask);
208+
break;
209+
}
210+
211+
} else {
212+
auto src2 = args.asMatPtr(2);
213+
214+
if (count > 4) {
215+
auto mask = args.asMatPtr(4);
216+
217+
cv::bitwise_xor(*src1, *src2, *dst, *mask);
218+
break;
219+
}
220+
221+
cv::bitwise_xor(*src1, *src2, *dst);
222+
}
223+
} else {
224+
auto src1 = args.asScalarPtr(1);
225+
auto src2 = args.asMatPtr(2);
226+
227+
if (count > 4) {
228+
auto mask = args.asMatPtr(4);
229+
230+
cv::bitwise_xor(*src1, *src2, *dst, *mask);
231+
break;
232+
}
233+
234+
cv::bitwise_xor(*src1, *src2, *dst);
143235
}
144-
cv::bitwise_xor(*src1, *src2, *dst);
145236
} break;
146237
case hashString("borderInterpolate", 17): {
147238
auto p = args.asNumber(1);
@@ -203,12 +294,26 @@ jsi::Object FOCV_Function::invoke(jsi::Runtime& runtime, const jsi::Value* argum
203294
} break;
204295

205296
case hashString("compare", 7): {
206-
auto src1 = args.asMatPtr(1);
207-
auto src2 = args.asMatPtr(2);
208-
auto dst = args.asMatPtr(3);
209297
auto cmpop = args.asNumber(4);
298+
auto dst = args.asMatPtr(3);
210299

211-
cv::compare(*src1, *src2, *dst, cmpop);
300+
if (args.isMat(1)) {
301+
auto src1 = args.asMatPtr(1);
302+
303+
if(args.isScalar(2)) {
304+
auto src2 = args.asScalarPtr(2);
305+
cv::compare(*src1, *src2, *dst, cmpop);
306+
} else {
307+
auto src2 = args.asMatPtr(2);
308+
cv::compare(*src1, *src2, *dst, cmpop);
309+
}
310+
} else {
311+
auto src1 = args.asScalarPtr(1);
312+
auto src2 = args.asMatPtr(2);
313+
314+
cv::compare(*src1, *src2, *dst, cmpop);
315+
}
316+
212317
} break;
213318
case hashString("completeSymm", 12): {
214319
auto lowerToUpper = args.asBool(2);

cpp/FOCV_Object.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,3 +366,37 @@ jsi::Object FOCV_Object::copyObjectFromVector(jsi::Runtime& runtime, const jsi::
366366

367367
return value;
368368
}
369+
370+
void FOCV_Object::addObjectToVector(jsi::Runtime& runtime, const jsi::Value* arguments, size_t count) {
371+
std::string createdId;
372+
373+
jsi::Object value(runtime);
374+
std::string objectType = FOCV_JsiObject::type_from_wrap(runtime, arguments[0]);
375+
std::string vectorId = FOCV_JsiObject::id_from_wrap(runtime, arguments[0]);
376+
std::string objectId = FOCV_JsiObject::id_from_wrap(runtime, arguments[1]);
377+
378+
switch(hashString(objectType.c_str(), objectType.size())) {
379+
case hashString("mat_vector", 10): {
380+
auto& array = *FOCV_Storage::get<std::vector<cv::Mat>>(vectorId);
381+
auto& object = *FOCV_Storage::get<cv::Mat>(objectId);
382+
array.push_back(std::move(object));
383+
384+
int x = 4;
385+
} break;
386+
case hashString("rect_vector", 11): {
387+
auto& array = *FOCV_Storage::get<std::vector<cv::Rect>>(vectorId);
388+
auto& object = *FOCV_Storage::get<cv::Rect>(objectId);
389+
array.push_back(object);
390+
} break;
391+
case hashString("point_vector", 12): {
392+
auto& array = *FOCV_Storage::get<std::vector<cv::Point>>(vectorId);
393+
auto& object = *FOCV_Storage::get<cv::Point>(objectId);
394+
array.push_back(object);
395+
} break;
396+
case hashString("point_vector_vector", 19): {
397+
auto& array = *FOCV_Storage::get<std::vector<std::vector<cv::Point>>>(vectorId);
398+
auto& object = *FOCV_Storage::get<std::vector<cv::Point>>(objectId);
399+
array.push_back(object);
400+
} break;
401+
}
402+
}

cpp/FOCV_Object.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class FOCV_Object {
3333
static jsi::Object create(jsi::Runtime& runtime, const jsi::Value* arguments, size_t count);
3434
static jsi::Object convertToJSI(jsi::Runtime& runtime, const jsi::Value* arguments, size_t count);
3535
static jsi::Object copyObjectFromVector(jsi::Runtime& runtime, const jsi::Value* arguments, size_t count);
36+
static void addObjectToVector(jsi::Runtime& runtime, const jsi::Value* arguments, size_t count);
3637
};
3738

3839
#endif /* FOCV_Object_hpp */

cpp/react-native-fast-opencv.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,17 @@ jsi::Value OpenCVPlugin::get(jsi::Runtime& runtime, const jsi::PropNameID& propN
233233
return FOCV_Object::copyObjectFromVector(runtime, arguments, count);
234234
});
235235
}
236+
else if (propName == "addObjectToVector") {
237+
return jsi::Function::createFromHostFunction(
238+
runtime, jsi::PropNameID::forAscii(runtime, "addObjectToVector"), 1,
239+
[=](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
240+
size_t count) -> jsi::Value {
241+
242+
FOCV_Object::addObjectToVector(runtime, arguments, count);
243+
244+
return jsi::Value(true);
245+
});
246+
}
236247
else if (propName == "invoke") {
237248
return jsi::Function::createFromHostFunction(
238249
runtime, jsi::PropNameID::forAscii(runtime, "invoke"), 1,

docs/pages/apidetails.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ copyObjectFromVector(vector: RectVector, itemIndex: number): Rect;
6161

6262
---
6363

64+
### Add Object to Vector
65+
66+
Adds an object to a vector.
67+
68+
```js
69+
addObjectToVector(vector: MatVector, object: Mat): void;
70+
addObjectToVector(vector: PointVector, object: Point): void;
71+
addObjectToVector(vector: RectVector, object: Rect): void;
72+
addObjectToVector(vector: PointVectorOfVectors, object: PointVector): void;
73+
```
74+
75+
---
76+
6477
### To JS Value
6578

6679
Converts an object to a JS-readable object.

docs/pages/availablefunctions.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ computes bitwise conjunction of the two arrays (dst = src1 & src2) Calculates th
8888
- mask optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
8989

9090
```js
91-
invoke(name: 'bitwise_and', src1: Mat, src2: Mat, dst: Mat, mask?: Mat): void;
91+
invoke(name: 'bitwise_and', src1: Mat, src2: Mat | Scalar, dst: Mat, mask?: Mat)
92+
invoke(name: 'bitwise_and', src1: Scalar, src2: Mat, dst: Mat, mask?: Mat): void;
9293
```
9394

9495
### bitwise_not
@@ -113,7 +114,8 @@ Calculates the per-element bit-wise disjunction of two arrays or an array and a
113114
- mask optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
114115

115116
```js
116-
invoke(name: 'bitwise_or', src1: Mat, src2: Mat, dst: Mat, mask?: Mat): void;
117+
invoke(name: 'bitwise_or', src1: Mat, src2: Mat | Scalar, dst: Mat, mask?: Mat): void;
118+
invoke(name: 'bitwise_or', src1: Scalar, src2: Mat, dst: Mat, mask?: Mat): void;
117119
```
118120

119121
### bitwise_xor
@@ -126,7 +128,8 @@ Calculates the per-element bit-wise "exclusive or" operation on two arrays or an
126128
- mask optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.
127129

128130
```js
129-
invoke(name: 'bitwise_xor', src1: Mat, src2: Mat, dst: Mat, mask?: Mat): void;
131+
invoke(name: 'bitwise_xor', src1: Mat, src2: Mat | Scalar, dst: Mat, mask?: Mat)
132+
invoke(name: 'bitwise_xor', src1: Scalar, src2: Mat, dst: Mat, mask?: Mat): void;
130133
```
131134

132135
### borderInterpolate
@@ -242,6 +245,13 @@ Performs the per-element comparison of two arrays or an array and scalar value
242245
invoke(
243246
name: 'compare',
244247
src1: Mat,
248+
src2: Mat | Scalar,
249+
dst: Mat,
250+
cmpop: CmpTypes
251+
): void;
252+
invoke(
253+
name: 'compare',
254+
src1: Scalar,
245255
src2: Mat,
246256
dst: Mat,
247257
cmpop: CmpTypes

example/Gemfile

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ source 'https://rubygems.org'
33
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
44
ruby ">= 2.6.10"
55

6-
# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
7-
# bound in the template on Cocoapods with next React Native release.
8-
gem 'cocoapods', '>= 1.13', '< 1.15'
9-
gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
6+
# Exclude problematic versions of cocoapods and activesupport that causes build failures.
7+
gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
8+
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
9+
gem 'xcodeproj', '< 1.26.0'
10+
gem 'concurrent-ruby', '< 1.3.4'
11+
12+
# Ruby 3.4.0 has removed some libraries from the standard library.
13+
gem 'bigdecimal'
14+
gem 'logger'
15+
gem 'benchmark'
16+
gem 'mutex_m'

example/android/app/build.gradle

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,12 @@ react {
4949
//
5050
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
5151
// hermesFlags = ["-O", "-output-source-map"]
52+
53+
autolinkLibrariesWithApp()
5254
}
5355

56+
57+
5458
/**
5559
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
5660
*/
@@ -67,7 +71,7 @@ def enableProguardInReleaseBuilds = false
6771
* give correct results when using with locales other than en-US. Note that
6872
* this variant is about 6MiB larger per architecture than default.
6973
*/
70-
def jscFlavor = 'org.webkit:android-jsc:+'
74+
def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'
7175

7276
android {
7377
ndkVersion rootProject.ext.ndkVersion
@@ -114,5 +118,3 @@ dependencies {
114118
implementation jscFlavor
115119
}
116120
}
117-
118-
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

example/android/app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
android:icon="@mipmap/ic_launcher"
1010
android:roundIcon="@mipmap/ic_launcher_round"
1111
android:allowBackup="false"
12-
android:theme="@style/AppTheme">
12+
android:theme="@style/AppTheme"
13+
android:supportsRtl="true">
1314
<activity
1415
android:name=".MainActivity"
1516
android:label="@string/app_name"

0 commit comments

Comments
 (0)