@@ -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 );
0 commit comments