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.
5 // Copyright (C) 2018-2019 Intel Corporation
8 #ifndef OPENCV_GAPI_GBACKEND_HPP
9 #define OPENCV_GAPI_GBACKEND_HPP
14 #include <ade/node.hpp>
16 #include "opencv2/gapi/garg.hpp"
17 #include "opencv2/gapi/own/mat.hpp"
19 #include "opencv2/gapi/util/optional.hpp"
20 #include "opencv2/gapi/own/scalar.hpp"
22 #include "compiler/gmodel.hpp"
27 // Forward declarations
32 template<typename... Ts> struct Class
34 template<typename T> using MapT = std::unordered_map<int, T>;
35 template<typename T> MapT<T>& slot()
37 return std::get<ade::util::type_list_index<T, Ts...>::value>(slots);
39 template<typename T> const MapT<T>& slot() const
41 return std::get<ade::util::type_list_index<T, Ts...>::value>(slots);
44 std::tuple<MapT<Ts>...> slots;
47 } // namespace magazine
48 #if !defined(GAPI_STANDALONE)
49 using Mag = magazine::Class<cv::gapi::own::Mat, cv::UMat, cv::gapi::own::Scalar, cv::detail::VectorRef>;
51 using Mag = magazine::Class<cv::gapi::own::Mat, cv::gapi::own::Scalar, cv::detail::VectorRef>;
56 void bindInArg (Mag& mag, const RcDesc &rc, const GRunArg &arg, bool is_umat = false);
57 void bindOutArg(Mag& mag, const RcDesc &rc, const GRunArgP &arg, bool is_umat = false);
59 void resetInternalData(Mag& mag, const Data &d);
60 cv::GRunArg getArg (const Mag& mag, const RcDesc &ref);
61 cv::GRunArgP getObjPtr ( Mag& mag, const RcDesc &rc, bool is_umat = false);
62 void writeBack (const Mag& mag, const RcDesc &rc, GRunArgP &g_arg, bool is_umat = false);
63 } // namespace magazine
67 template<typename... Ts> struct magazine
69 template<typename T> using MapT = std::unordered_map<int, T>;
70 template<typename T> MapT<T>& slot()
72 return std::get<util::type_list_index<T, Ts...>::value>(slots);
74 template<typename T> const MapT<T>& slot() const
76 return std::get<util::type_list_index<T, Ts...>::value>(slots);
79 std::tuple<MapT<Ts>...> slots;
90 inline cv::util::optional<T> getCompileArg(const cv::GCompileArgs &args)
92 for (auto &compile_arg : args)
94 if (compile_arg.tag == cv::detail::CompileArgTag<T>::tag())
96 return cv::util::optional<T>(compile_arg.get<T>());
99 return cv::util::optional<T>();
106 #endif // OPENCV_GAPI_GBACKEND_HPP