mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
Merge pull request #14090 from andrey-golubev:gapi_unused_node_fluid_fix
This commit is contained in:
commit
9a202c1522
@ -1399,6 +1399,20 @@ void GFluidBackendImpl::addBackendPasses(ade::ExecutionEngineSetupContext &ectx)
|
|||||||
// will be copied by views on each iteration and base our choice
|
// will be copied by views on each iteration and base our choice
|
||||||
// on this criteria)
|
// on this criteria)
|
||||||
auto readers = node->outNodes();
|
auto readers = node->outNodes();
|
||||||
|
|
||||||
|
// There can be a situation when __internal__ nodes produced as part of some
|
||||||
|
// operation are unused later in the graph:
|
||||||
|
//
|
||||||
|
// in -> OP1
|
||||||
|
// |------> internal_1 // unused node
|
||||||
|
// |------> internal_2 -> OP2
|
||||||
|
// |------> out
|
||||||
|
//
|
||||||
|
// To allow graphs like the one above, skip nodes with empty outNodes()
|
||||||
|
if (readers.empty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const auto &candidate = ade::util::find_if(readers, [&](ade::NodeHandle nh) {
|
const auto &candidate = ade::util::find_if(readers, [&](ade::NodeHandle nh) {
|
||||||
return fg.metadata(nh).contains<FluidUnit>() &&
|
return fg.metadata(nh).contains<FluidUnit>() &&
|
||||||
fg.metadata(nh).get<FluidUnit>().border_size == fd.border_size;
|
fg.metadata(nh).get<FluidUnit>().border_size == fd.border_size;
|
||||||
|
@ -752,4 +752,19 @@ INSTANTIATE_TEST_CASE_P(Fluid, NV12RoiTest,
|
|||||||
,std::make_pair(cv::Size{1920, 1080}, cv::Rect{0, 710, 1920, 270})
|
,std::make_pair(cv::Size{1920, 1080}, cv::Rect{0, 710, 1920, 270})
|
||||||
));
|
));
|
||||||
|
|
||||||
|
TEST(Fluid, UnusedNodeTest) {
|
||||||
|
cv::GMat in;
|
||||||
|
cv::GMat a, b, c, d;
|
||||||
|
std::tie(a, b, c, d) = cv::gapi::split4(in);
|
||||||
|
cv::GMat out = cv::gapi::merge3(a, b, c);
|
||||||
|
|
||||||
|
cv::Mat in_mat(cv::Size(8, 8), CV_8UC4);
|
||||||
|
cv::Mat out_mat(cv::Size(8, 8), CV_8UC3);
|
||||||
|
|
||||||
|
cv::GComputation comp(cv::GIn(in), cv::GOut(out));
|
||||||
|
|
||||||
|
ASSERT_NO_THROW(comp.apply(cv::gin(in_mat), cv::gout(out_mat),
|
||||||
|
cv::compile_args(cv::gapi::core::fluid::kernels())));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace opencv_test
|
} // namespace opencv_test
|
||||||
|
Loading…
Reference in New Issue
Block a user