Commit 54ff72a1 authored by Ruslan Garnov's avatar Ruslan Garnov Committed by Alexander Alekhin

Merge pull request #14599 from rgarnov:gapi_aux_kernels

G-API aux kernels (#14599)

* Removed gcpuimgproc.hpp and gcpucore.hpp

* Changed GModel::orderedInputs and orderedOutputs to get ConstGraph&

* Added auxiliaryKernels() method of GBackend::Priv
parent cbb699ef
...@@ -45,6 +45,11 @@ void cv::gapi::GBackend::Priv::addBackendPasses(ade::ExecutionEngineSetupContext ...@@ -45,6 +45,11 @@ void cv::gapi::GBackend::Priv::addBackendPasses(ade::ExecutionEngineSetupContext
// add custom (backend-specific) graph transformations // add custom (backend-specific) graph transformations
} }
cv::gapi::GKernelPackage cv::gapi::GBackend::Priv::auxiliaryKernels() const
{
return {};
}
// GBackend public implementation ////////////////////////////////////////////// // GBackend public implementation //////////////////////////////////////////////
cv::gapi::GBackend::GBackend() cv::gapi::GBackend::GBackend()
{ {
......
...@@ -47,6 +47,8 @@ public: ...@@ -47,6 +47,8 @@ public:
virtual void addBackendPasses(ade::ExecutionEngineSetupContext &); virtual void addBackendPasses(ade::ExecutionEngineSetupContext &);
virtual cv::gapi::GKernelPackage auxiliaryKernels() const;
virtual ~Priv() = default; virtual ~Priv() = default;
}; };
......
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
#include "compiler/gmodel.hpp" #include "compiler/gmodel.hpp"
#include "backends/cpu/gcpubackend.hpp" #include "backends/cpu/gcpubackend.hpp"
#include "backends/cpu/gcpuimgproc.hpp" #include "opencv2/gapi/cpu/imgproc.hpp"
#include "backends/cpu/gcpucore.hpp" #include "opencv2/gapi/cpu/core.hpp"
#include "api/gbackend_priv.hpp" // FIXME: Make it part of Backend SDK! #include "api/gbackend_priv.hpp" // FIXME: Make it part of Backend SDK!
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "opencv2/gapi/core.hpp" #include "opencv2/gapi/core.hpp"
#include "opencv2/gapi/cpu/core.hpp" #include "opencv2/gapi/cpu/core.hpp"
#include "backends/cpu/gcpucore.hpp" #include "opencv2/gapi/cpu/gcpukernel.hpp"
GAPI_OCV_KERNEL(GCPUAdd, cv::gapi::core::GAdd) GAPI_OCV_KERNEL(GCPUAdd, cv::gapi::core::GAdd)
{ {
......
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
//
// Copyright (C) 2018 Intel Corporation
#ifndef OPENCV_GAPI_GCPUCORE_HPP
#define OPENCV_GAPI_GCPUCORE_HPP
#include <map>
#include <string>
#include "opencv2/gapi/cpu/gcpukernel.hpp"
namespace cv { namespace gimpl {
// NB: This is what a "Kernel Package" from the original Wiki doc should be.
void loadCPUCore(std::map<std::string, cv::GCPUKernel> &kmap);
}
}
#endif // OPENCV_GAPI_GCPUCORE_HPP
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "opencv2/gapi/imgproc.hpp" #include "opencv2/gapi/imgproc.hpp"
#include "opencv2/gapi/cpu/imgproc.hpp" #include "opencv2/gapi/cpu/imgproc.hpp"
#include "backends/cpu/gcpuimgproc.hpp" #include "opencv2/gapi/cpu/gcpukernel.hpp"
namespace { namespace {
cv::Mat add_border(const cv::Mat& in, const int ksize, const int borderType, const cv::Scalar& bordVal){ cv::Mat add_border(const cv::Mat& in, const int ksize, const int borderType, const cv::Scalar& bordVal){
......
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
//
// Copyright (C) 2018 Intel Corporation
#ifndef OPENCV_GAPI_GCPUIMGPROC_HPP
#define OPENCV_GAPI_GCPUIMGPROC_HPP
#include <map>
#include <string>
#include "opencv2/gapi/cpu/gcpukernel.hpp"
namespace cv { namespace gimpl {
// NB: This is what a "Kernel Package" from the origianl Wiki doc should be.
void loadCPUImgProc(std::map<std::string, cv::GCPUKernel> &kmap);
}}
#endif // OPENCV_GAPI_GCPUIMGPROC_HPP
...@@ -48,9 +48,17 @@ namespace ...@@ -48,9 +48,17 @@ namespace
{ {
cv::gapi::GKernelPackage getKernelPackage(cv::GCompileArgs &args) cv::gapi::GKernelPackage getKernelPackage(cv::GCompileArgs &args)
{ {
auto withAuxKernels = [](const cv::gapi::GKernelPackage& pkg) {
cv::gapi::GKernelPackage aux_pkg;
for (const auto &b : pkg.backends()) {
aux_pkg = combine(aux_pkg, b.priv().auxiliaryKernels());
}
return combine(pkg, aux_pkg);
};
auto has_use_only = cv::gimpl::getCompileArg<cv::gapi::use_only>(args); auto has_use_only = cv::gimpl::getCompileArg<cv::gapi::use_only>(args);
if (has_use_only) if (has_use_only)
return has_use_only.value().pkg; return withAuxKernels(has_use_only.value().pkg);
static auto ocv_pkg = static auto ocv_pkg =
#if !defined(GAPI_STANDALONE) #if !defined(GAPI_STANDALONE)
...@@ -60,7 +68,8 @@ namespace ...@@ -60,7 +68,8 @@ namespace
cv::gapi::GKernelPackage(); cv::gapi::GKernelPackage();
#endif // !defined(GAPI_STANDALONE) #endif // !defined(GAPI_STANDALONE)
auto user_pkg = cv::gimpl::getCompileArg<cv::gapi::GKernelPackage>(args); auto user_pkg = cv::gimpl::getCompileArg<cv::gapi::GKernelPackage>(args);
return combine(ocv_pkg, user_pkg.value_or(cv::gapi::GKernelPackage{})); auto user_pkg_with_aux = withAuxKernels(user_pkg.value_or(cv::gapi::GKernelPackage{}));
return combine(ocv_pkg, user_pkg_with_aux);
} }
cv::util::optional<std::string> getGraphDumpDirectory(cv::GCompileArgs& args) cv::util::optional<std::string> getGraphDumpDirectory(cv::GCompileArgs& args)
......
...@@ -114,7 +114,7 @@ void GModel::linkOut(Graph &g, ade::NodeHandle opH, ade::NodeHandle objH, std::s ...@@ -114,7 +114,7 @@ void GModel::linkOut(Graph &g, ade::NodeHandle opH, ade::NodeHandle objH, std::s
op.outs[out_port] = RcDesc{gm.rc, gm.shape, {}}; op.outs[out_port] = RcDesc{gm.rc, gm.shape, {}};
} }
std::vector<ade::NodeHandle> GModel::orderedInputs(Graph &g, ade::NodeHandle nh) std::vector<ade::NodeHandle> GModel::orderedInputs(ConstGraph &g, ade::NodeHandle nh)
{ {
std::vector<ade::NodeHandle> sorted_in_nhs(nh->inEdges().size()); std::vector<ade::NodeHandle> sorted_in_nhs(nh->inEdges().size());
for (const auto& in_eh : nh->inEdges()) for (const auto& in_eh : nh->inEdges())
...@@ -126,7 +126,7 @@ std::vector<ade::NodeHandle> GModel::orderedInputs(Graph &g, ade::NodeHandle nh) ...@@ -126,7 +126,7 @@ std::vector<ade::NodeHandle> GModel::orderedInputs(Graph &g, ade::NodeHandle nh)
return sorted_in_nhs; return sorted_in_nhs;
} }
std::vector<ade::NodeHandle> GModel::orderedOutputs(Graph &g, ade::NodeHandle nh) std::vector<ade::NodeHandle> GModel::orderedOutputs(ConstGraph &g, ade::NodeHandle nh)
{ {
std::vector<ade::NodeHandle> sorted_out_nhs(nh->outEdges().size()); std::vector<ade::NodeHandle> sorted_out_nhs(nh->outEdges().size());
for (const auto& out_eh : nh->outEdges()) for (const auto& out_eh : nh->outEdges())
......
...@@ -201,8 +201,8 @@ namespace GModel ...@@ -201,8 +201,8 @@ namespace GModel
GAPI_EXPORTS void redirectReaders(Graph &g, ade::NodeHandle from, ade::NodeHandle to); GAPI_EXPORTS void redirectReaders(Graph &g, ade::NodeHandle from, ade::NodeHandle to);
GAPI_EXPORTS void redirectWriter (Graph &g, ade::NodeHandle from, ade::NodeHandle to); GAPI_EXPORTS void redirectWriter (Graph &g, ade::NodeHandle from, ade::NodeHandle to);
GAPI_EXPORTS std::vector<ade::NodeHandle> orderedInputs (Graph &g, ade::NodeHandle nh); GAPI_EXPORTS std::vector<ade::NodeHandle> orderedInputs (ConstGraph &g, ade::NodeHandle nh);
GAPI_EXPORTS std::vector<ade::NodeHandle> orderedOutputs(Graph &g, ade::NodeHandle nh); GAPI_EXPORTS std::vector<ade::NodeHandle> orderedOutputs(ConstGraph &g, ade::NodeHandle nh);
// Returns input meta array for given op node // Returns input meta array for given op node
// Array is sparse, as metadata for non-gapi input objects is empty // Array is sparse, as metadata for non-gapi input objects is empty
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment