@ -9,25 +9,126 @@
# include "opencv2/gapi/cpu/gcpukernel.hpp"
# include "gapi_mock_kernels.hpp"
# include "opencv2/gapi/cpu/gcpukernel.hpp" // cpu::backend
# include "opencv2/gapi/fluid/gfluidkernel.hpp" // fluid::backend
namespace opencv_test
{
namespace
{
G_TYPED_KERNEL ( GClone , < GMat ( GMat ) > , " org.opencv.test.clone " )
namespace I
{
static GMatDesc outMeta ( GMatDesc in ) { return in ; }
G_TYPED_KERNEL ( GClone , < GMat ( GMat ) > , " org.opencv.test.clone " )
{
static GMatDesc outMeta ( GMatDesc in ) { return in ; }
} ;
}
enum class KernelTags
{
CPU_CUSTOM_BGR2GRAY ,
CPU_CUSTOM_CLONE ,
CPU_CUSTOM_ADD ,
FLUID_CUSTOM_BGR2GRAY ,
FLUID_CUSTOM_CLONE ,
FLUID_CUSTOM_ADD
} ;
GAPI_OCV_KERNEL ( GCloneImpl , GClone )
class HeteroGraph : public : : testing : : Test
{
static void run ( const cv : : Mat & in , cv : : Mat & out )
public :
HeteroGraph ( )
{
out = in . clone ( ) ;
auto tmp = I : : GClone : : on ( cv : : gapi : : add ( in [ 0 ] , in [ 1 ] ) ) ;
out = cv : : gapi : : imgproc : : GBGR2Gray : : on ( tmp ) ;
}
static void registerCallKernel ( KernelTags kernel_tag ) {
kernel_calls . insert ( kernel_tag ) ;
}
bool checkCallKernel ( KernelTags kernel_tag ) {
return ade : : util : : contains ( kernel_calls , kernel_tag ) ;
}
protected :
void SetUp ( ) override
{
if ( ! kernel_calls . empty ( ) )
cv : : util : : throw_error ( std : : logic_error ( " Kernel call log has not been cleared!!! " ) ) ;
}
void TearDown ( ) override
{
kernel_calls . clear ( ) ;
}
protected :
cv : : GMat in [ 2 ] , out ;
static std : : set < KernelTags > kernel_calls ;
} ;
}
namespace cpu
{
GAPI_OCV_KERNEL ( GClone , I : : GClone )
{
static void run ( const cv : : Mat & , cv : : Mat )
{
HeteroGraph : : registerCallKernel ( KernelTags : : CPU_CUSTOM_CLONE ) ;
}
} ;
GAPI_OCV_KERNEL ( BGR2Gray , cv : : gapi : : imgproc : : GBGR2Gray )
{
static void run ( const cv : : Mat & , cv : : Mat & )
{
HeteroGraph : : registerCallKernel ( KernelTags : : CPU_CUSTOM_BGR2GRAY ) ;
}
} ;
GAPI_OCV_KERNEL ( GAdd , cv : : gapi : : core : : GAdd )
{
static void run ( const cv : : Mat & , const cv : : Mat & , int , cv : : Mat & )
{
HeteroGraph : : registerCallKernel ( KernelTags : : CPU_CUSTOM_ADD ) ;
}
} ;
}
namespace fluid
{
GAPI_FLUID_KERNEL ( GClone , I : : GClone , false )
{
static const int Window = 1 ;
static void run ( const cv : : gapi : : fluid : : View & , cv : : gapi : : fluid : : Buffer )
{
HeteroGraph : : registerCallKernel ( KernelTags : : FLUID_CUSTOM_CLONE ) ;
}
} ;
GAPI_FLUID_KERNEL ( BGR2Gray , cv : : gapi : : imgproc : : GBGR2Gray , false )
{
static const int Window = 1 ;
static void run ( const cv : : gapi : : fluid : : View & , cv : : gapi : : fluid : : Buffer & )
{
HeteroGraph : : registerCallKernel ( KernelTags : : FLUID_CUSTOM_BGR2GRAY ) ;
}
} ;
GAPI_FLUID_KERNEL ( GAdd , cv : : gapi : : core : : GAdd , false )
{
static const int Window = 1 ;
static void run ( const cv : : gapi : : fluid : : View & , const cv : : gapi : : fluid : : View & ,
int , cv : : gapi : : fluid : : Buffer & )
{
HeteroGraph : : registerCallKernel ( KernelTags : : FLUID_CUSTOM_ADD ) ;
}
} ;
}
std : : set < KernelTags > HeteroGraph : : kernel_calls ;
} // anonymous namespace
TEST ( KernelPackage , Create )
{
@ -57,17 +158,6 @@ TEST(KernelPackage, IncludesAPI)
EXPECT_FALSE ( pkg . includesAPI < I : : Qux > ( ) ) ;
}
TEST ( KernelPackage , IncludesAPI_Overlapping )
{
namespace J = Jupiter ;
namespace S = Saturn ;
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar , S : : Foo , S : : Bar > ( ) ;
EXPECT_TRUE ( pkg . includesAPI < I : : Foo > ( ) ) ;
EXPECT_TRUE ( pkg . includesAPI < I : : Bar > ( ) ) ;
EXPECT_FALSE ( pkg . includesAPI < I : : Baz > ( ) ) ;
EXPECT_FALSE ( pkg . includesAPI < I : : Qux > ( ) ) ;
}
TEST ( KernelPackage , Include_Add )
{
namespace J = Jupiter ;
@ -78,23 +168,6 @@ TEST(KernelPackage, Include_Add)
EXPECT_TRUE ( pkg . includes < J : : Qux > ( ) ) ;
}
TEST ( KernelPackage , Include_KEEP )
{
namespace J = Jupiter ;
namespace S = Saturn ;
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar > ( ) ;
EXPECT_FALSE ( pkg . includes < S : : Foo > ( ) ) ;
EXPECT_FALSE ( pkg . includes < S : : Bar > ( ) ) ;
pkg . include < S : : Bar > ( ) ; // default (KEEP)
EXPECT_TRUE ( pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Bar > ( ) ) ;
pkg . include < S : : Foo > ( cv : : unite_policy : : KEEP ) ; // explicit (KEEP)
EXPECT_TRUE ( pkg . includes < J : : Foo > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Foo > ( ) ) ;
}
TEST ( KernelPackage , Include_REPLACE )
{
namespace J = Jupiter ;
@ -102,7 +175,7 @@ TEST(KernelPackage, Include_REPLACE)
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar > ( ) ;
EXPECT_FALSE ( pkg . includes < S : : Bar > ( ) ) ;
pkg . include < S : : Bar > ( cv : : unite_policy : : REPLACE ) ;
pkg . include < S : : Bar > ( ) ;
EXPECT_FALSE ( pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Bar > ( ) ) ;
}
@ -111,31 +184,27 @@ TEST(KernelPackage, RemoveBackend)
{
namespace J = Jupiter ;
namespace S = Saturn ;
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar , S : : Foo > ( ) ;
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar , S : : Baz > ( ) ;
EXPECT_TRUE ( pkg . includes < J : : Foo > ( ) ) ;
EXPECT_TRUE ( pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Foo > ( ) ) ;
pkg . remove ( J : : backend ( ) ) ;
EXPECT_FALSE ( pkg . includes < J : : Foo > ( ) ) ;
EXPECT_FALSE ( pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Foo > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Baz > ( ) ) ;
} ;
TEST ( KernelPackage , RemoveAPI )
{
namespace J = Jupiter ;
namespace S = Saturn ;
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar , S : : Foo , S : : Bar > ( ) ;
auto pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar > ( ) ;
EXPECT_TRUE ( pkg . includes < J : : Foo > ( ) ) ;
EXPECT_TRUE ( pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Foo > ( ) ) ;
pkg . remove < I : : Foo > ( ) ;
EXPECT_TRUE ( pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( pkg . includes < S : : Bar > ( ) ) ;
EXPECT_FALSE ( pkg . includes < J : : Foo > ( ) ) ;
EXPECT_FALSE ( pkg . includes < S : : Foo > ( ) ) ;
} ;
TEST ( KernelPackage , CreateHetero )
@ -177,7 +246,7 @@ TEST(KernelPackage, Combine_REPLACE_Full)
namespace S = Saturn ;
auto j_pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar , J : : Baz > ( ) ;
auto s_pkg = cv : : gapi : : kernels < S : : Foo , S : : Bar , S : : Baz > ( ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg , cv : : unite_policy : : REPLACE ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg ) ;
EXPECT_EQ ( 3u , u_pkg . size ( ) ) ;
EXPECT_FALSE ( u_pkg . includes < J : : Foo > ( ) ) ;
@ -194,7 +263,7 @@ TEST(KernelPackage, Combine_REPLACE_Partial)
namespace S = Saturn ;
auto j_pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar > ( ) ;
auto s_pkg = cv : : gapi : : kernels < S : : Bar > ( ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg , cv : : unite_policy : : REPLACE ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg ) ;
EXPECT_EQ ( 2u , u_pkg . size ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Foo > ( ) ) ;
@ -208,38 +277,7 @@ TEST(KernelPackage, Combine_REPLACE_Append)
namespace S = Saturn ;
auto j_pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar > ( ) ;
auto s_pkg = cv : : gapi : : kernels < S : : Qux > ( ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg , cv : : unite_policy : : REPLACE ) ;
EXPECT_EQ ( 3u , u_pkg . size ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Foo > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < S : : Qux > ( ) ) ;
}
TEST ( KernelPackage , Combine_KEEP_AllDups )
{
namespace J = Jupiter ;
namespace S = Saturn ;
auto j_pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar , J : : Baz > ( ) ;
auto s_pkg = cv : : gapi : : kernels < S : : Foo , S : : Bar , S : : Baz > ( ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg , cv : : unite_policy : : KEEP ) ;
EXPECT_EQ ( 6u , u_pkg . size ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Foo > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Bar > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Baz > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < S : : Foo > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < S : : Bar > ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < S : : Baz > ( ) ) ;
}
TEST ( KernelPackage , Combine_KEEP_Append_NoDups )
{
namespace J = Jupiter ;
namespace S = Saturn ;
auto j_pkg = cv : : gapi : : kernels < J : : Foo , J : : Bar > ( ) ;
auto s_pkg = cv : : gapi : : kernels < S : : Qux > ( ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg , cv : : unite_policy : : KEEP ) ;
auto u_pkg = cv : : gapi : : combine ( j_pkg , s_pkg ) ;
EXPECT_EQ ( 3u , u_pkg . size ( ) ) ;
EXPECT_TRUE ( u_pkg . includes < J : : Foo > ( ) ) ;
@ -252,7 +290,7 @@ TEST(KernelPackage, TestWithEmptyLHS)
namespace J = Jupiter ;
auto lhs = cv : : gapi : : kernels < > ( ) ;
auto rhs = cv : : gapi : : kernels < J : : Foo > ( ) ;
auto pkg = cv : : gapi : : combine ( lhs , rhs , cv : : unite_policy : : KEEP ) ;
auto pkg = cv : : gapi : : combine ( lhs , rhs ) ;
EXPECT_EQ ( 1u , pkg . size ( ) ) ;
EXPECT_TRUE ( pkg . includes < J : : Foo > ( ) ) ;
@ -263,22 +301,211 @@ TEST(KernelPackage, TestWithEmptyRHS)
namespace J = Jupiter ;
auto lhs = cv : : gapi : : kernels < J : : Foo > ( ) ;
auto rhs = cv : : gapi : : kernels < > ( ) ;
auto pkg = cv : : gapi : : combine ( lhs , rhs , cv : : unite_policy : : KEEP ) ;
auto pkg = cv : : gapi : : combine ( lhs , rhs ) ;
EXPECT_EQ ( 1u , pkg . size ( ) ) ;
EXPECT_TRUE ( pkg . includes < J : : Foo > ( ) ) ;
}
TEST ( KernelPackage , Return_Unique_Backends )
{
auto pkg = cv : : gapi : : kernels < cpu : : GClone , fluid : : BGR2Gray , fluid : : GAdd > ( ) ;
EXPECT_EQ ( 2u , pkg . backends ( ) . size ( ) ) ;
}
TEST ( KernelPackage , Can_Use_Custom_Kernel )
{
cv : : GMat in [ 2 ] ;
auto out = GClone : : on ( cv : : gapi : : add ( in [ 0 ] , in [ 1 ] ) ) ;
auto out = I : : GClone : : on ( cv : : gapi : : add ( in [ 0 ] , in [ 1 ] ) ) ;
const auto in_meta = cv : : GMetaArg ( cv : : GMatDesc { CV_8U , 1 , cv : : Size ( 32 , 32 ) } ) ;
auto pkg = cv : : gapi : : kernels < GCloneImpl > ( ) ;
auto pkg = cv : : gapi : : kernels < cpu : : GClone > ( ) ;
EXPECT_NO_THROW ( cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
compile ( { in_meta , in_meta } , cv : : compile_args ( pkg ) ) ) ;
}
TEST_F ( HeteroGraph , Call_Custom_Kernel_Default_Backend )
{
// in0 -> GCPUAdd -> tmp -> cpu::GClone -> GCPUBGR2Gray -> out
// ^
// |
// in1 -------`
cv : : Mat in_mat1 = cv : : Mat : : eye ( 3 , 3 , CV_8UC3 ) ,
in_mat2 = cv : : Mat : : eye ( 3 , 3 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GClone > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( pkg ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : CPU_CUSTOM_CLONE ) ) ;
}
TEST_F ( HeteroGraph , Call_Custom_Kernel_Not_Default_Backend )
{
// in0 -> GCPUAdd -> tmp -> fluid::GClone -> GCPUBGR2Gray -> out
// ^
// |
// in1 -------`
cv : : Mat in_mat1 = cv : : Mat : : eye ( 3 , 3 , CV_8UC3 ) ,
in_mat2 = cv : : Mat : : eye ( 3 , 3 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < fluid : : GClone > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( pkg ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_CLONE ) ) ;
}
TEST_F ( HeteroGraph , Replace_Default_To_Same_Backend )
{
// in0 -> GCPUAdd -> tmp -> cpu::GClone -> cpu::BGR2Gray -> out
// ^
// |
// in1 -------`
cv : : Mat in_mat1 = cv : : Mat : : eye ( 3 , 3 , CV_8UC3 ) ,
in_mat2 = cv : : Mat : : eye ( 3 , 3 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GClone , cpu : : BGR2Gray > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( pkg ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : CPU_CUSTOM_BGR2GRAY ) ) ;
}
TEST_F ( HeteroGraph , Replace_Default_To_Another_Backend )
{
//in0 -> GCPUAdd -> tmp -> cpu::GClone -> fluid::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GClone , fluid : : BGR2Gray > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( pkg ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_BGR2GRAY ) ) ;
}
TEST_F ( HeteroGraph , Use_Only_Same_Backend )
{
//in0 -> cpu::GAdd -> tmp -> cpu::GClone -> cpu::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GAdd , cpu : : GClone , cpu : : BGR2Gray > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( cv : : gapi : : use_only { pkg } ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : CPU_CUSTOM_ADD ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : CPU_CUSTOM_CLONE ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : CPU_CUSTOM_BGR2GRAY ) ) ;
}
TEST_F ( HeteroGraph , Use_Only_Another_Backend )
{
//in0 -> fluid::GAdd -> tmp -> fluid::GClone -> fluid::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < fluid : : GAdd , fluid : : GClone , fluid : : BGR2Gray > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( cv : : gapi : : use_only { pkg } ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_ADD ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_CLONE ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_BGR2GRAY ) ) ;
}
TEST_F ( HeteroGraph , Use_Only_Hetero_Backend )
{
//in0 -> cpu::GAdd -> tmp -> fluid::GClone -> fluid::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GAdd , fluid : : GClone , fluid : : BGR2Gray > ( ) ;
cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( cv : : gapi : : use_only { pkg } ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : CPU_CUSTOM_ADD ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_CLONE ) ) ;
EXPECT_TRUE ( checkCallKernel ( KernelTags : : FLUID_CUSTOM_BGR2GRAY ) ) ;
}
TEST_F ( HeteroGraph , Use_Only_Not_Found_Default )
{
//in0 -> GCPUAdd -> tmp -> fluid::GClone -> fluid::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < fluid : : GClone , fluid : : BGR2Gray > ( ) ;
EXPECT_ANY_THROW ( cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( cv : : gapi : : use_only { pkg } ) ) ) ;
}
TEST_F ( HeteroGraph , Use_Only_Not_Found_Custom )
{
//in0 -> cpu::GAdd -> tmp -> fluid::GClone -> fluid::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GAdd , fluid : : BGR2Gray > ( ) ;
EXPECT_ANY_THROW ( cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) , cv : : compile_args ( cv : : gapi : : use_only { pkg } ) ) ) ;
}
TEST_F ( HeteroGraph , Use_Only_Other_Package_Ignored )
{
//in0 -> cpu::GAdd -> tmp -> fluid::GClone -> fluid::BGR2Gray -> out
// ^
// |
//in1 --------`
cv : : Mat in_mat1 ( 300 , 300 , CV_8UC3 ) ,
in_mat2 ( 300 , 300 , CV_8UC3 ) ,
out_mat ;
auto pkg = cv : : gapi : : kernels < cpu : : GAdd , fluid : : BGR2Gray > ( ) ;
auto clone_pkg = cv : : gapi : : kernels < cpu : : GClone > ( ) ;
EXPECT_ANY_THROW ( cv : : GComputation ( cv : : GIn ( in [ 0 ] , in [ 1 ] ) , cv : : GOut ( out ) ) .
apply ( cv : : gin ( in_mat1 , in_mat2 ) , cv : : gout ( out_mat ) ,
cv : : compile_args ( clone_pkg , cv : : gapi : : use_only { pkg } ) ) ) ;
}
} // namespace opencv_test