/** @} */
+ // FYI - this function is already commented above
GAPI_EXPORTS GKernelPackage combine(const GKernelPackage &lhs,
const GKernelPackage &rhs);
+
+ /**
+ * @brief Combines multiple G-API kernel packages into one
+ *
+ * @overload
+ *
+ * This function successively combines the passed kernel packages using a right fold.
+ * Calling `combine(a, b, c)` is equal to `combine(a, combine(b, c))`.
+ *
+ * @return The resulting kernel package
+ */
+ template<typename... Ps>
+ GKernelPackage combine(const GKernelPackage &a, const GKernelPackage &b, Ps&&... rest)
+ {
+ return combine(a, combine(b, rest...));
+ }
+
+ /** \addtogroup gapi_compile_args
+ * @{
+ */
/**
* @brief cv::use_only() is a special combinator which hints G-API to use only
* kernels specified in cv::GComputation::compile() (and not to extend kernels available by
{
GKernelPackage pkg;
};
+ /** @} */
} // namespace gapi
compile({in_meta, in_meta}, cv::compile_args(pkg)));
}
+TEST(KernelPackage, CombineMultiple)
+{
+ namespace J = Jupiter;
+ namespace S = Saturn;
+ auto a = cv::gapi::kernels<J::Foo>();
+ auto b = cv::gapi::kernels<J::Bar>();
+ auto c = cv::gapi::kernels<S::Qux>();
+ auto pkg = cv::gapi::combine(a, b, c);
+
+ EXPECT_EQ(3u, pkg.size());
+ EXPECT_TRUE(pkg.includes<J::Foo>());
+ EXPECT_TRUE(pkg.includes<J::Bar>());
+ EXPECT_TRUE(pkg.includes<S::Qux>());
+}
+
TEST_F(HeteroGraph, Call_Custom_Kernel_Default_Backend)
{
// in0 -> GCPUAdd -> tmp -> cpu::GClone -> GCPUBGR2Gray -> out