Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/gapi/src/backends/common/gbackend.hpp
16344 views
1
// This file is part of OpenCV project.
2
// It is subject to the license terms in the LICENSE file found in the top-level directory
3
// of this distribution and at http://opencv.org/license.html.
4
//
5
// Copyright (C) 2018 Intel Corporation
6
7
8
#ifndef OPENCV_GAPI_GBACKEND_HPP
9
#define OPENCV_GAPI_GBACKEND_HPP
10
11
#include <string>
12
#include <memory>
13
14
#include <ade/node.hpp>
15
16
#include "opencv2/gapi/garg.hpp"
17
#include "opencv2/gapi/own/mat.hpp"
18
19
#include "opencv2/gapi/util/optional.hpp"
20
#include "opencv2/gapi/own/scalar.hpp"
21
22
#include "compiler/gmodel.hpp"
23
24
namespace cv {
25
namespace gimpl {
26
27
// Forward declarations
28
struct Data;
29
struct RcDesc;
30
31
namespace magazine {
32
template<typename... Ts> struct Class
33
{
34
template<typename T> using MapT = std::unordered_map<int, T>;
35
template<typename T> MapT<T>& slot()
36
{
37
return std::get<ade::util::type_list_index<T, Ts...>::value>(slots);
38
}
39
template<typename T> const MapT<T>& slot() const
40
{
41
return std::get<ade::util::type_list_index<T, Ts...>::value>(slots);
42
}
43
private:
44
std::tuple<MapT<Ts>...> slots;
45
};
46
47
} // namespace magazine
48
49
using Mag = magazine::Class<cv::gapi::own::Mat, cv::gapi::own::Scalar, cv::detail::VectorRef>;
50
51
namespace magazine
52
{
53
void bindInArg (Mag& mag, const RcDesc &rc, const GRunArg &arg);
54
void bindOutArg(Mag& mag, const RcDesc &rc, const GRunArgP &arg);
55
56
void resetInternalData(Mag& mag, const Data &d);
57
cv::GRunArg getArg (const Mag& mag, const RcDesc &ref);
58
cv::GRunArgP getObjPtr ( Mag& mag, const RcDesc &rc);
59
void writeBack (const Mag& mag, const RcDesc &rc, GRunArgP &g_arg);
60
} // namespace magazine
61
62
namespace detail
63
{
64
template<typename... Ts> struct magazine
65
{
66
template<typename T> using MapT = std::unordered_map<int, T>;
67
template<typename T> MapT<T>& slot()
68
{
69
return std::get<util::type_list_index<T, Ts...>::value>(slots);
70
}
71
template<typename T> const MapT<T>& slot() const
72
{
73
return std::get<util::type_list_index<T, Ts...>::value>(slots);
74
}
75
private:
76
std::tuple<MapT<Ts>...> slots;
77
};
78
} // namespace detail
79
80
struct GRuntimeArgs
81
{
82
GRunArgs inObjs;
83
GRunArgsP outObjs;
84
};
85
86
template<typename T>
87
inline cv::util::optional<T> getCompileArg(const cv::GCompileArgs &args)
88
{
89
for (auto &compile_arg : args)
90
{
91
if (compile_arg.tag == cv::detail::CompileArgTag<T>::tag())
92
{
93
return cv::util::optional<T>(compile_arg.get<T>());
94
}
95
}
96
return cv::util::optional<T>();
97
}
98
99
100
101
}} // cv::gimpl
102
103
#endif // OPENCV_GAPI_GBACKEND_HPP
104
105