namespace InferenceEngine::gapi

namespace gapi {

// namespaces

namespace InferenceEngine::gapi::kernels;
    namespace InferenceEngine::gapi::kernels::areaDownscale32f;
    namespace InferenceEngine::gapi::kernels::areaDownscale8u;
    namespace InferenceEngine::gapi::kernels::areaUpscale;
    namespace InferenceEngine::gapi::kernels::areaUpscale32f;
    namespace InferenceEngine::gapi::kernels::avx;
    namespace InferenceEngine::gapi::kernels::avx512;
    namespace InferenceEngine::gapi::kernels::linear;
    namespace InferenceEngine::gapi::kernels::linear32f;
    namespace InferenceEngine::gapi::kernels::neon;

// typedefs

typedef cv::gapi::own::Size Size;
typedef std::tuple<cv::GMat, cv::GMat> GMat2;
typedef std::tuple<cv::GMat, cv::GMat, cv::GMat> GMat3;
typedef std::tuple<cv::GMat, cv::GMat, cv::GMat, cv::GMat> GMat4;

// global functions

cv::gapi::GKernelPackage preprocKernels();

G_TYPED_KERNEL(
    ChanToPlane,
    <cv::GMat(cv::GMat, int)>,
    "com.intel.ie.chan_to_plane"
    );

G_TYPED_KERNEL(
    ScalePlane,
    <cv::GMat(cv::GMat, int, Size, Size, int)>,
    "com.intel.ie.scale_plane"
    );

G_TYPED_KERNEL_M(
    ScalePlanes,
    <GMat3(cv::GMat, int, Size, Size, int)>,
    "com.intel.ie.scale_planes"
    );

G_TYPED_KERNEL_M(
    ScalePlanes4,
    <GMat4(cv::GMat, int, Size, Size, int)>,
    "com.intel.ie.scale_planes4"
    );

G_TYPED_KERNEL(
    ScalePlane8u,
    <cv::GMat(cv::GMat, Size, int)>,
    "com.intel.ie.scale_plane_8u"
    );

G_TYPED_KERNEL(
    ScalePlane32f,
    <cv::GMat(cv::GMat, Size, int)>,
    "com.intel.ie.scale_plane_32f"
    );

G_TYPED_KERNEL(
    UpscalePlaneArea8u,
    <cv::GMat(cv::GMat, Size, int)>,
    "com.intel.ie.upscale_plane_area_8u"
    );

G_TYPED_KERNEL(
    UpscalePlaneArea32f,
    <cv::GMat(cv::GMat, Size, int)>,
    "com.intel.ie.upscale_plane_area_32f"
    );

G_TYPED_KERNEL(
    ScalePlaneArea8u,
    <cv::GMat(cv::GMat, Size, int)>,
    "com.intel.ie.scale_plane_area_8u"
    );

G_TYPED_KERNEL(
    ScalePlaneArea32f,
    <cv::GMat(cv::GMat, Size, int)>,
    "com.intel.ie.scale_plane_area_32f"
    );

G_TYPED_KERNEL(Merge2, <cv::GMat(cv::GMat, cv::GMat)>, "com.intel.ie.merge2");

G_TYPED_KERNEL(
    Merge3,
    <cv::GMat(cv::GMat, cv::GMat, cv::GMat)>,
    "com.intel.ie.merge3"
    );

G_TYPED_KERNEL(
    Merge4,
    <cv::GMat(cv::GMat, cv::GMat, cv::GMat, cv::GMat)>,
    "com.intel.ie.merge4"
    );

G_TYPED_KERNEL_M(Split2, <GMat2(cv::GMat)>, "com.intel.ie.split2");
G_TYPED_KERNEL_M(Split3, <GMat3(cv::GMat)>, "com.intel.ie.split3");
G_TYPED_KERNEL_M(Split4, <GMat4(cv::GMat)>, "com.intel.ie.split4");

G_TYPED_KERNEL(
    NV12toRGB,
    <cv::GMat(cv::GMat, cv::GMat)>,
    "com.intel.ie.nv12torgb"
    );

G_TYPED_KERNEL(
    I420toRGB,
    <cv::GMat(cv::GMat, cv::GMat, cv::GMat)>,
    "com.intel.ie.i420torgb"
    );

G_TYPED_KERNEL(
    ConvertDepth,
    <cv::GMat(cv::GMat, int depth)>,
    "com.intel.ie.ConvertDepth"
    );

G_TYPED_KERNEL(
    GSubC,
    <cv::GMat(cv::GMat, cv::GScalar, int)>,
    "com.intel.ie.math.subC"
    );

G_TYPED_KERNEL(
    GDivC,
    <cv::GMat(cv::GMat, cv::GScalar, double, int)>,
    "com.intel.ie.math.divC"
    );

} // namespace gapi