Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.8 KiB
157 lines
3.8 KiB
// 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 |
|
|
|
|
|
#include "precomp.hpp" |
|
|
|
#include <ade/graph.hpp> |
|
|
|
#include "opencv2/gapi/gproto.hpp" // descr_of |
|
#include "opencv2/gapi/gcompiled.hpp" |
|
|
|
#include "compiler/gcompiled_priv.hpp" |
|
#include "backends/common/gbackend.hpp" |
|
|
|
// GCompiled private implementation //////////////////////////////////////////// |
|
void cv::GCompiled::Priv::setup(const GMetaArgs &_metaArgs, |
|
const GMetaArgs &_outMetas, |
|
std::unique_ptr<cv::gimpl::GExecutor> &&_pE) |
|
{ |
|
m_metas = _metaArgs; |
|
m_outMetas = _outMetas; |
|
m_exec = std::move(_pE); |
|
} |
|
|
|
bool cv::GCompiled::Priv::isEmpty() const |
|
{ |
|
return !m_exec; |
|
} |
|
|
|
void cv::GCompiled::Priv::run(cv::gimpl::GRuntimeArgs &&args) |
|
{ |
|
// Strip away types since ADE knows nothing about that |
|
// args will be taken by specific GBackendExecutables |
|
checkArgs(args); |
|
m_exec->run(std::move(args)); |
|
} |
|
|
|
const cv::GMetaArgs& cv::GCompiled::Priv::metas() const |
|
{ |
|
return m_metas; |
|
} |
|
|
|
const cv::GMetaArgs& cv::GCompiled::Priv::outMetas() const |
|
{ |
|
return m_outMetas; |
|
} |
|
|
|
void cv::GCompiled::Priv::checkArgs(const cv::gimpl::GRuntimeArgs &args) const |
|
{ |
|
const auto runtime_metas = descr_of(args.inObjs); |
|
if (runtime_metas != m_metas) |
|
{ |
|
util::throw_error(std::logic_error("This object was compiled " |
|
"for different metadata!")); |
|
// FIXME: Add details on what is actually wrong |
|
} |
|
} |
|
|
|
bool cv::GCompiled::Priv::canReshape() const |
|
{ |
|
GAPI_Assert(m_exec); |
|
return m_exec->canReshape(); |
|
} |
|
|
|
void cv::GCompiled::Priv::reshape(const GMetaArgs& inMetas, const GCompileArgs& args) |
|
{ |
|
GAPI_Assert(m_exec); |
|
m_exec->reshape(inMetas, args); |
|
m_metas = inMetas; |
|
} |
|
|
|
const cv::gimpl::GModel::Graph& cv::GCompiled::Priv::model() const |
|
{ |
|
GAPI_Assert(nullptr != m_exec); |
|
return m_exec->model(); |
|
} |
|
|
|
// GCompiled public implementation ///////////////////////////////////////////// |
|
cv::GCompiled::GCompiled() |
|
: m_priv(new Priv()) |
|
{ |
|
} |
|
|
|
cv::GCompiled::operator bool() const |
|
{ |
|
return !m_priv->isEmpty(); |
|
} |
|
|
|
void cv::GCompiled::operator() (GRunArgs &&ins, GRunArgsP &&outs) |
|
{ |
|
// FIXME: Check that <outs> matches the protocol |
|
m_priv->run(cv::gimpl::GRuntimeArgs{std::move(ins),std::move(outs)}); |
|
} |
|
|
|
#if !defined(GAPI_STANDALONE) |
|
void cv::GCompiled::operator ()(cv::Mat in, cv::Mat &out) |
|
{ |
|
(*this)(cv::gin(in), cv::gout(out)); |
|
} |
|
|
|
void cv::GCompiled::operator() (cv::Mat in, cv::Scalar &out) |
|
{ |
|
(*this)(cv::gin(in), cv::gout(out)); |
|
} |
|
|
|
void cv::GCompiled::operator() (cv::Mat in1, cv::Mat in2, cv::Mat &out) |
|
{ |
|
(*this)(cv::gin(in1, in2), cv::gout(out)); |
|
} |
|
|
|
void cv::GCompiled::operator() (cv::Mat in1, cv::Mat in2, cv::Scalar &out) |
|
{ |
|
(*this)(cv::gin(in1, in2), cv::gout(out)); |
|
} |
|
|
|
void cv::GCompiled::operator ()(const std::vector<cv::Mat> &ins, |
|
const std::vector<cv::Mat> &outs) |
|
{ |
|
GRunArgs call_ins; |
|
GRunArgsP call_outs; |
|
|
|
// Make a temporary copy of vector outs - cv::Mats are copies anyway |
|
auto tmp = outs; |
|
for (const cv::Mat &m : ins) { call_ins.emplace_back(m); } |
|
for ( cv::Mat &m : tmp) { call_outs.emplace_back(&m); } |
|
|
|
(*this)(std::move(call_ins), std::move(call_outs)); |
|
} |
|
#endif // !defined(GAPI_STANDALONE) |
|
|
|
const cv::GMetaArgs& cv::GCompiled::metas() const |
|
{ |
|
return m_priv->metas(); |
|
} |
|
|
|
const cv::GMetaArgs& cv::GCompiled::outMetas() const |
|
{ |
|
return m_priv->outMetas(); |
|
} |
|
|
|
cv::GCompiled::Priv& cv::GCompiled::priv() |
|
{ |
|
return *m_priv; |
|
} |
|
|
|
bool cv::GCompiled::canReshape() const |
|
{ |
|
return m_priv->canReshape(); |
|
} |
|
|
|
void cv::GCompiled::reshape(const GMetaArgs& inMetas, const GCompileArgs& args) |
|
{ |
|
m_priv->reshape(inMetas, args); |
|
}
|
|
|