opencv_binding_generator/settings/
argument_override.rs

1use std::collections::HashMap;
2
3use crate::func::FuncMatcher;
4use crate::type_ref::Constness::{Const, Mut};
5use crate::type_ref::TypeRefTypeHint;
6use crate::writer::rust_native::type_ref::Lifetime;
7use crate::SupportedModule;
8
9pub const ARG_OVERRIDE_SELF: &str = "this";
10
11pub type ArgOverride = FuncMatcher<'static, HashMap<&'static str, TypeRefTypeHint>>;
12pub type ReturnOverride = FuncMatcher<'static, TypeRefTypeHint>;
13pub type PropertyOverride = HashMap<&'static str, TypeRefTypeHint>;
14
15pub fn arg_override_factory(module: SupportedModule) -> ArgOverride {
16	match module {
17		SupportedModule::Calib3d | SupportedModule::Calib | SupportedModule::ThreeD => calib3d_arg_override_factory(),
18		SupportedModule::Core => core_arg_override_factory(),
19		SupportedModule::Freetype => freetype_arg_override_factory(),
20		SupportedModule::HighGui => highgui_arg_override_factory(),
21		SupportedModule::ImgProc => imgproc_arg_override_factory(),
22		SupportedModule::ObjDetect => objdetect_arg_override_factory(),
23		SupportedModule::VideoIo => videoio_arg_override_factory(),
24		SupportedModule::XImgProc => ximgproc_arg_override_factory(),
25		_ => ArgOverride::empty(),
26	}
27}
28
29pub fn return_override_factory(module: SupportedModule) -> ReturnOverride {
30	match module {
31		SupportedModule::Core => core_return_override_factory(),
32		SupportedModule::ObjDetect => objdetect_return_override_factory(),
33		_ => ReturnOverride::empty(),
34	}
35}
36
37pub fn property_override_factory(module: SupportedModule) -> PropertyOverride {
38	match module {
39		SupportedModule::Core => core_property_override_factory(),
40		_ => PropertyOverride::default(),
41	}
42}
43
44fn calib3d_arg_override_factory() -> ArgOverride {
45	FuncMatcher::create(HashMap::from([
46		(
47			"cv::getOptimalNewCameraMatrix",
48			vec![(
49				pred!(
50					mut,
51					[
52						"cameraMatrix",
53						"distCoeffs",
54						"imageSize",
55						"alpha",
56						"newImgSize",
57						"validPixROI",
58						"centerPrincipalPoint",
59					]
60				),
61				HashMap::from([("validPixROI", TypeRefTypeHint::Nullable)]),
62			)],
63		),
64		(
65			"cv::findCirclesGrid",
66			vec![
67				(
68					pred!(
69						mut,
70						["image", "patternSize", "centers", "flags", "blobDetector", "parameters"]
71					),
72					HashMap::from([("blobDetector", TypeRefTypeHint::Nullable)]),
73				),
74				(
75					pred!(mut, ["image", "patternSize", "centers", "flags", "blobDetector"]),
76					HashMap::from([("blobDetector", TypeRefTypeHint::Nullable)]),
77				),
78			],
79		),
80	]))
81}
82
83fn core_arg_override_factory() -> ArgOverride {
84	FuncMatcher::create(HashMap::from([
85		(
86			"cv::Mat::at",
87			vec![(pred!(["idx"]), HashMap::from([("idx", TypeRefTypeHint::Slice)]))],
88		),
89		(
90			"cv::Mat::ptr",
91			vec![(pred!(["idx"]), HashMap::from([("idx", TypeRefTypeHint::Slice)]))],
92		),
93		(
94			"cv::Mat::Mat",
95			vec![
96				(
97					pred!(mut, ["sizes", "type", "data", "steps"]),
98					HashMap::from([("steps", TypeRefTypeHint::NullableSlice)]),
99				),
100				(
101					pred!(mut, ["ndims", "sizes", "type", "s"]),
102					HashMap::from([("steps", TypeRefTypeHint::NullableSlice)]),
103				),
104				(
105					pred!(mut, ["ndims", "sizes", "type", "data", "steps"]),
106					HashMap::from([("steps", TypeRefTypeHint::NullableSlice)]),
107				),
108			],
109		),
110		(
111			"cv::minMaxLoc",
112			vec![
113				(
114					pred!(mut, ["src", "minVal", "maxVal", "minLoc", "maxLoc", "mask"]),
115					HashMap::from([
116						("minVal", TypeRefTypeHint::Nullable),
117						("maxVal", TypeRefTypeHint::Nullable),
118						("minLoc", TypeRefTypeHint::Nullable),
119						("maxLoc", TypeRefTypeHint::Nullable),
120					]),
121				),
122				(
123					pred!(mut, ["a", "minVal", "maxVal", "minIdx", "maxIdx"]),
124					HashMap::from([
125						("minVal", TypeRefTypeHint::Nullable),
126						("maxVal", TypeRefTypeHint::Nullable),
127						("minIdx", TypeRefTypeHint::Nullable),
128						("maxIdx", TypeRefTypeHint::Nullable),
129					]),
130				),
131			],
132		),
133		(
134			"cv::minMaxIdx",
135			vec![(
136				pred!(mut, ["src", "minVal", "maxVal", "minIdx", "maxIdx", "mask"]),
137				HashMap::from([
138					("minVal", TypeRefTypeHint::Nullable),
139					("maxVal", TypeRefTypeHint::Nullable),
140					("minIdx", TypeRefTypeHint::Nullable),
141					("maxIdx", TypeRefTypeHint::Nullable),
142				]),
143			)],
144		),
145		(
146			"cv::RotatedRect::points",
147			vec![(
148				pred!(const, ["pts"]),
149				HashMap::from([("pts", TypeRefTypeHint::AddArrayLength(4))]),
150			)],
151		),
152		(
153			"cv::MatConstIterator::pos",
154			vec![(
155				pred!(const, ["_idx"]),
156				HashMap::from([("_idx", TypeRefTypeHint::PrimitivePtrAsRaw)]),
157			)],
158		),
159		(
160			"cv::MatSize::MatSize",
161			vec![(
162				pred!(mut, ["_p"]),
163				HashMap::from([("_p", TypeRefTypeHint::PrimitivePtrAsRaw)]),
164			)],
165		),
166		(
167			"cv::cuda::GpuMat::setDefaultAllocator",
168			vec![(
169				pred!(mut, ["allocator"]),
170				HashMap::from([("allocator", TypeRefTypeHint::ExplicitLifetime(Lifetime::statik()))]),
171			)],
172		),
173		(
174			"cv::ocl::convertTypeStr",
175			vec![(
176				pred!(mut, ["sdepth", "ddepth", "cn", "buf", "buf_size"]),
177				HashMap::from([("buf", TypeRefTypeHint::StringWithLen("buf_size".into()))]),
178			)],
179		),
180	]))
181}
182
183fn freetype_arg_override_factory() -> ArgOverride {
184	FuncMatcher::create(HashMap::from([(
185		"cv::freetype::FreeType2::loadFontData",
186		vec![(
187			pred!(mut, ["pBuf", "bufSize", "idx"]),
188			HashMap::from([("pBuf", TypeRefTypeHint::PrimitivePtrAsRaw)]),
189		)],
190	)]))
191}
192
193fn highgui_arg_override_factory() -> ArgOverride {
194	FuncMatcher::create(HashMap::from([(
195		"cv::createTrackbar",
196		vec![(
197			pred!(mut, ["trackbarname", "winname", "value", "count", "onChange", "userdata"],),
198			HashMap::from([("value", TypeRefTypeHint::Nullable)]),
199		)],
200	)]))
201}
202
203fn imgproc_arg_override_factory() -> ArgOverride {
204	FuncMatcher::create(HashMap::from([
205		(
206			"cv::getAffineTransform",
207			vec![(
208				pred!(mut, ["src", "dst"]),
209				HashMap::from([
210					("src", TypeRefTypeHint::AddArrayLength(3)),
211					("dst", TypeRefTypeHint::AddArrayLength(3)),
212				]),
213			)],
214		),
215		(
216			"cv::getPerspectiveTransform",
217			vec![
218				(
219					pred!(mut, ["src", "dst", "solveMethod"]),
220					HashMap::from([
221						("src", TypeRefTypeHint::AddArrayLength(4)),
222						("dst", TypeRefTypeHint::AddArrayLength(4)),
223					]),
224				),
225				(
226					pred!(mut, ["src", "dst"]), // 3.x
227					HashMap::from([
228						("src", TypeRefTypeHint::AddArrayLength(4)),
229						("dst", TypeRefTypeHint::AddArrayLength(4)),
230					]),
231				),
232			],
233		),
234		(
235			"cv::EMD",
236			vec![(
237				pred!(mut, ["signature1", "signature2", "distType", "cost", "lowerBound", "flow"],),
238				HashMap::from([("lowerBound", TypeRefTypeHint::Nullable)]),
239			)],
240		),
241	]))
242}
243
244fn objdetect_arg_override_factory() -> ArgOverride {
245	FuncMatcher::create(HashMap::from([(
246		"cv::decodeQRCode",
247		vec![(
248			pred!(mut, ["in", "points", "decoded_info", "straight_qrcode"]), // 3.4
249			HashMap::from([("decoded_info", TypeRefTypeHint::StringAsBytes(None))]),
250		)],
251	)]))
252}
253
254fn videoio_arg_override_factory() -> ArgOverride {
255	FuncMatcher::create(HashMap::from([(
256		"cv::VideoWriter::fourcc",
257		vec![(
258			pred!(mut, ["c1", "c2", "c3", "c4"]),
259			HashMap::from([
260				("c1", TypeRefTypeHint::CharAsRustChar),
261				("c2", TypeRefTypeHint::CharAsRustChar),
262				("c3", TypeRefTypeHint::CharAsRustChar),
263				("c4", TypeRefTypeHint::CharAsRustChar),
264			]),
265		)],
266	)]))
267}
268
269fn ximgproc_arg_override_factory() -> ArgOverride {
270	FuncMatcher::create(HashMap::from([(
271		"cv::ximgproc::createStructuredEdgeDetection",
272		vec![(
273			pred!(mut, ["model", "howToGetFeatures"]),
274			HashMap::from([("howToGetFeatures", TypeRefTypeHint::Nullable)]),
275		)],
276	)]))
277}
278
279fn core_return_override_factory() -> ReturnOverride {
280	// todo MatExpr?
281	FuncMatcher::create(HashMap::from([
282		// Mat
283		(
284			"cv::Mat::Mat",
285			vec![
286				(
287					pred!(mut, ["m"], ["const cv::Mat*"]),
288					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Elided),
289				),
290				(
291					pred!(mut, ["m", "roi"]),
292					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Elided),
293				),
294				(
295					pred!(mut, ["m", "ranges"]),
296					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Custom("boxed")),
297				),
298				(
299					pred!(mut, ["m", "rowRange", "colRange"]),
300					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Custom("boxed")),
301				),
302			],
303		),
304		(
305			"cv::Mat::reshape",
306			vec![
307				(
308					pred!(const, ["cn", "rows"]),
309					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
310				),
311				(
312					pred!(const, ["cn", "newndims", "newsz"]),
313					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
314				),
315				(
316					pred!(const, ["cn", "newshape"]),
317					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
318				),
319			],
320		),
321		(
322			"cv::Mat::row",
323			vec![(
324				pred!(const, ["y"]),
325				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
326			)],
327		),
328		(
329			"cv::Mat::col",
330			vec![(
331				pred!(const, ["x"]),
332				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
333			)],
334		),
335		(
336			"cv::Mat::rowRange",
337			vec![
338				(
339					pred!(const, ["startrow", "endrow"]),
340					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
341				),
342				(
343					pred!(const, ["r"]),
344					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
345				),
346			],
347		),
348		(
349			"cv::Mat::colRange",
350			vec![
351				(
352					pred!(const, ["startcol", "endcol"]),
353					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
354				),
355				(
356					pred!(const, ["r"]),
357					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
358				),
359			],
360		),
361		(
362			"cv::Mat::diag",
363			vec![(
364				pred!(const, ["d"]),
365				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
366			)],
367		),
368		(
369			"cv::Mat::operator()",
370			vec![
371				(
372					pred!(const, ["roi"]),
373					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
374				),
375				(
376					pred!(const, ["rowRange", "colRange"]),
377					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
378				),
379				(
380					pred!(const, ["ranges"]),
381					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
382				),
383			],
384		),
385		// GpuMatND
386		(
387			"cv::cuda::GpuMatND::createGpuMatHeader",
388			vec![
389				(
390					pred!(const, ["idx", "rowRange", "colRange"]),
391					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
392				),
393				(
394					pred!(const, []),
395					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
396				),
397			],
398		),
399		(
400			"cv::cuda::GpuMatND::operator()",
401			vec![
402				(
403					pred!(const, ["idx", "rowRange", "colRange"]),
404					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
405				),
406				(
407					pred!(const, ["ranges"]),
408					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
409				),
410			],
411		),
412		// GpuMat
413		(
414			"cv::cuda::GpuMat::GpuMat",
415			vec![
416				(
417					pred!(mut, ["m", "rowRange", "colRange"]),
418					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Elided),
419				),
420				(
421					pred!(mut, ["m", "roi"]),
422					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Elided),
423				),
424			],
425		),
426		(
427			"cv::cuda::GpuMat::row",
428			vec![(
429				pred!(const, ["y"]),
430				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
431			)],
432		),
433		(
434			"cv::cuda::GpuMat::col",
435			vec![(
436				pred!(const, ["x"]),
437				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
438			)],
439		),
440		(
441			"cv::cuda::GpuMat::rowRange",
442			vec![
443				(
444					pred!(const, ["startrow", "endrow"]),
445					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
446				),
447				(
448					pred!(const, ["r"]),
449					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
450				),
451			],
452		),
453		(
454			"cv::cuda::GpuMat::colRange",
455			vec![
456				(
457					pred!(const, ["startcol", "endcol"]),
458					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
459				),
460				(
461					pred!(const, ["r"]),
462					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
463				),
464			],
465		),
466		(
467			"cv::cuda::GpuMat::reshape",
468			vec![(
469				pred!(const, ["cn", "rows"]),
470				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
471			)],
472		),
473		(
474			"cv::cuda::GpuMat::operator()",
475			vec![
476				(
477					pred!(const, ["rowRange", "colRange"]),
478					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
479				),
480				(
481					pred!(const, ["roi"]),
482					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
483				),
484			],
485		),
486		// UMat
487		(
488			"cv::UMat::UMat",
489			vec![
490				(
491					pred!(mut, ["m", "rowRange", "colRange"]),
492					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Custom("boxed")),
493				),
494				(
495					pred!(mut, ["m", "roi"]),
496					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Elided),
497				),
498				(
499					pred!(mut, ["m", "ranges"]),
500					TypeRefTypeHint::BoxedAsRef(Mut, &["m"], Lifetime::Custom("boxed")),
501				),
502			],
503		),
504		(
505			"cv::UMat::row",
506			vec![(
507				pred!(const, ["y"]),
508				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
509			)],
510		),
511		(
512			"cv::UMat::col",
513			vec![(
514				pred!(const, ["x"]),
515				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
516			)],
517		),
518		(
519			"cv::UMat::rowRange",
520			vec![
521				(
522					pred!(const, ["startrow", "endrow"]),
523					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
524				),
525				(
526					pred!(const, ["r"]),
527					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
528				),
529			],
530		),
531		(
532			"cv::UMat::colRange",
533			vec![
534				(
535					pred!(const, ["startcol", "endcol"]),
536					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
537				),
538				(
539					pred!(const, ["r"]),
540					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
541				),
542			],
543		),
544		(
545			"cv::UMat::diag",
546			vec![(
547				pred!(const, ["d"]),
548				TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
549			)],
550		),
551		(
552			"cv::UMat::reshape",
553			vec![
554				(
555					pred!(const, ["cn", "rows"]),
556					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
557				),
558				(
559					pred!(const, ["cn", "newndims", "newsz"]),
560					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
561				),
562			],
563		),
564		(
565			"cv::UMat::operator()",
566			vec![
567				(
568					pred!(const, ["rowRange", "colRange"]),
569					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
570				),
571				(
572					pred!(const, ["roi"]),
573					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
574				),
575				(
576					pred!(const, ["ranges"]),
577					TypeRefTypeHint::BoxedAsRef(Mut, &[ARG_OVERRIDE_SELF], Lifetime::Elided),
578				),
579			],
580		),
581		(
582			"cv::_InputArray::_InputArray",
583			vec![
584				(
585					pred!(mut, ["m"]),
586					TypeRefTypeHint::BoxedAsRef(Const, &["m"], Lifetime::Elided),
587				),
588				(
589					pred!(mut, ["expr"]),
590					TypeRefTypeHint::BoxedAsRef(Const, &["expr"], Lifetime::Elided),
591				),
592				(
593					pred!(mut, ["vec"]),
594					TypeRefTypeHint::BoxedAsRef(Const, &["vec"], Lifetime::Elided),
595				),
596				(
597					pred!(mut, ["val"]),
598					TypeRefTypeHint::BoxedAsRef(Const, &["val"], Lifetime::Elided),
599				),
600				(
601					pred!(mut, ["d_mat"]),
602					TypeRefTypeHint::BoxedAsRef(Const, &["d_mat"], Lifetime::Elided),
603				),
604				(
605					pred!(mut, ["d_mat_array"]),
606					TypeRefTypeHint::BoxedAsRef(Const, &["d_mat_array"], Lifetime::Elided),
607				),
608				(
609					pred!(mut, ["buf"]),
610					TypeRefTypeHint::BoxedAsRef(Const, &["buf"], Lifetime::Elided),
611				),
612				(
613					pred!(mut, ["cuda_mem"]),
614					TypeRefTypeHint::BoxedAsRef(Const, &["cuda_mem"], Lifetime::Elided),
615				),
616				(
617					pred!(mut, ["um"]),
618					TypeRefTypeHint::BoxedAsRef(Const, &["um"], Lifetime::Elided),
619				),
620				(
621					pred!(mut, ["umv"]),
622					TypeRefTypeHint::BoxedAsRef(Const, &["umv"], Lifetime::Elided),
623				),
624			],
625		),
626		(
627			"cv::_OutputArray::_OutputArray",
628			vec![
629				(
630					pred!(mut, ["m"]),
631					TypeRefTypeHint::BoxedAsRef(Const, &["m"], Lifetime::Elided),
632				),
633				(
634					pred!(mut, ["vec"]),
635					TypeRefTypeHint::BoxedAsRef(Const, &["vec"], Lifetime::Elided),
636				),
637				(
638					pred!(mut, ["d_mat"]),
639					TypeRefTypeHint::BoxedAsRef(Const, &["d_mat"], Lifetime::Elided),
640				),
641				(
642					pred!(mut, ["buf"]),
643					TypeRefTypeHint::BoxedAsRef(Const, &["buf"], Lifetime::Elided),
644				),
645				(
646					pred!(mut, ["cuda_mem"]),
647					TypeRefTypeHint::BoxedAsRef(Const, &["cuda_mem"], Lifetime::Elided),
648				),
649			],
650		),
651		(
652			"cv::_InputOutputArray::_InputOutputArray",
653			vec![
654				(
655					pred!(mut, ["m"]),
656					TypeRefTypeHint::BoxedAsRef(Const, &["m"], Lifetime::Elided),
657				),
658				(
659					pred!(mut, ["vec"]),
660					TypeRefTypeHint::BoxedAsRef(Const, &["vec"], Lifetime::Elided),
661				),
662				(
663					pred!(mut, ["d_mat"]),
664					TypeRefTypeHint::BoxedAsRef(Const, &["d_mat"], Lifetime::Elided),
665				),
666				(
667					pred!(mut, ["buf"]),
668					TypeRefTypeHint::BoxedAsRef(Const, &["buf"], Lifetime::Elided),
669				),
670				(
671					pred!(mut, ["cuda_mem"]),
672					TypeRefTypeHint::BoxedAsRef(Const, &["cuda_mem"], Lifetime::Elided),
673				),
674			],
675		),
676	]))
677}
678
679fn objdetect_return_override_factory() -> ReturnOverride {
680	FuncMatcher::create(HashMap::from([
681		(
682			"cv::QRCodeDetector::decode",
683			vec![(
684				pred!(mut, ["img", "points", "straight_qrcode"]),
685				TypeRefTypeHint::StringAsBytes(None),
686			)],
687		),
688		(
689			"cv::QRCodeDetector::decodeCurved",
690			vec![(
691				pred!(mut, ["img", "points", "straight_qrcode"]),
692				TypeRefTypeHint::StringAsBytes(None),
693			)],
694		),
695		(
696			"cv::QRCodeDetector::detectAndDecode",
697			vec![(
698				pred!(mut, ["img", "points", "straight_qrcode"]),
699				TypeRefTypeHint::StringAsBytes(None),
700			)],
701		),
702		(
703			"cv::QRCodeDetector::detectAndDecodeCurved",
704			vec![(
705				pred!(mut, ["img", "points", "straight_qrcode"],),
706				TypeRefTypeHint::StringAsBytes(None),
707			)],
708		),
709		(
710			"cv::GraphicalCodeDetector::decode",
711			vec![(
712				pred!(const, ["img", "points", "straight_code"]),
713				TypeRefTypeHint::StringAsBytes(None),
714			)],
715		),
716		(
717			"cv::GraphicalCodeDetector::detectAndDecode",
718			vec![(
719				pred!(const, ["img", "points", "straight_code"],),
720				TypeRefTypeHint::StringAsBytes(None),
721			)],
722		),
723	]))
724}
725
726fn core_property_override_factory() -> PropertyOverride {
727	HashMap::from([(
728		"cv::cuda::GpuMat::allocator",
729		TypeRefTypeHint::ExplicitLifetime(Lifetime::statik()),
730	)])
731}