Path: blob/master/modules/gapi/src/backends/common/gbackend.hpp
16344 views
// This file is part of OpenCV project.1// It is subject to the license terms in the LICENSE file found in the top-level directory2// of this distribution and at http://opencv.org/license.html.3//4// Copyright (C) 2018 Intel Corporation567#ifndef OPENCV_GAPI_GBACKEND_HPP8#define OPENCV_GAPI_GBACKEND_HPP910#include <string>11#include <memory>1213#include <ade/node.hpp>1415#include "opencv2/gapi/garg.hpp"16#include "opencv2/gapi/own/mat.hpp"1718#include "opencv2/gapi/util/optional.hpp"19#include "opencv2/gapi/own/scalar.hpp"2021#include "compiler/gmodel.hpp"2223namespace cv {24namespace gimpl {2526// Forward declarations27struct Data;28struct RcDesc;2930namespace magazine {31template<typename... Ts> struct Class32{33template<typename T> using MapT = std::unordered_map<int, T>;34template<typename T> MapT<T>& slot()35{36return std::get<ade::util::type_list_index<T, Ts...>::value>(slots);37}38template<typename T> const MapT<T>& slot() const39{40return std::get<ade::util::type_list_index<T, Ts...>::value>(slots);41}42private:43std::tuple<MapT<Ts>...> slots;44};4546} // namespace magazine4748using Mag = magazine::Class<cv::gapi::own::Mat, cv::gapi::own::Scalar, cv::detail::VectorRef>;4950namespace magazine51{52void bindInArg (Mag& mag, const RcDesc &rc, const GRunArg &arg);53void bindOutArg(Mag& mag, const RcDesc &rc, const GRunArgP &arg);5455void resetInternalData(Mag& mag, const Data &d);56cv::GRunArg getArg (const Mag& mag, const RcDesc &ref);57cv::GRunArgP getObjPtr ( Mag& mag, const RcDesc &rc);58void writeBack (const Mag& mag, const RcDesc &rc, GRunArgP &g_arg);59} // namespace magazine6061namespace detail62{63template<typename... Ts> struct magazine64{65template<typename T> using MapT = std::unordered_map<int, T>;66template<typename T> MapT<T>& slot()67{68return std::get<util::type_list_index<T, Ts...>::value>(slots);69}70template<typename T> const MapT<T>& slot() const71{72return std::get<util::type_list_index<T, Ts...>::value>(slots);73}74private:75std::tuple<MapT<Ts>...> slots;76};77} // namespace detail7879struct GRuntimeArgs80{81GRunArgs inObjs;82GRunArgsP outObjs;83};8485template<typename T>86inline cv::util::optional<T> getCompileArg(const cv::GCompileArgs &args)87{88for (auto &compile_arg : args)89{90if (compile_arg.tag == cv::detail::CompileArgTag<T>::tag())91{92return cv::util::optional<T>(compile_arg.get<T>());93}94}95return cv::util::optional<T>();96}979899100}} // cv::gimpl101102#endif // OPENCV_GAPI_GBACKEND_HPP103104105