• Dmitry Matveev's avatar
    Merge pull request #12608 from dmatveev:gapi · 29e88e50
    Dmitry Matveev authored
    * G-API Initial code upload
    
    * Update G-API code base to Sep-24-2018
    
    * The majority of OpenCV buildbot problems was addressed
    
    * Update G-API code base to 24-Sep-18 EOD
    
    * G-API code base update 25-Sep-2018
    
    * Linux warnings should be resolved
    * Documentation build should become green
    * Number of Windows warnings should be reduced
    
    * Update G-API code base to 25-Sep-18 EOD
    
    * ARMv7 build issue should be resolved
    * ADE is bumped to latest version and should fix Clang builds for macOS/iOS
    * Remaining Windows warnings should be resolved
    * New Linux32 / ARMv7 warnings should be resolved
    
    * G-API code base update 25-Sep-2018-EOD2
    
    * Final Windows warnings should be resolved now
    
    * G-API code base update 26-Sep-2018
    
    * Fixed issues with precompiled headers in module and its tests
    29e88e50
gcompiler.hpp 1.51 KB
// 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


#ifndef OPENCV_GAPI_GCOMPILER_HPP
#define OPENCV_GAPI_GCOMPILER_HPP


#include "opencv2/gapi/gcommon.hpp"
#include "opencv2/gapi/gkernel.hpp"
#include "opencv2/gapi/gcomputation.hpp"

#include <ade/execution_engine/execution_engine.hpp>

namespace cv { namespace gimpl {

// FIXME: exported for internal tests only!
class GAPI_EXPORTS GCompiler
{
    const GComputation&      m_c;
    const GMetaArgs          m_metas;
    GCompileArgs             m_args;
    ade::ExecutionEngine     m_e;

    cv::gapi::GKernelPackage m_all_kernels;

    void validateInputMeta();
    void validateOutProtoArgs();

public:
    explicit GCompiler(const GComputation &c,
                             GMetaArgs    &&metas,
                             GCompileArgs &&args);

    // The method which does everything...
    GCompiled compile();

    // But is actually composed of this:
    using GPtr = std::unique_ptr<ade::Graph>;
    GPtr       generateGraph();               // Unroll GComputation into a GModel
    void       runPasses(ade::Graph &g);      // Apply all G-API passes on a GModel
    void       compileIslands(ade::Graph &g); // Instantiate GIslandExecutables in GIslandModel
    GCompiled  produceCompiled(GPtr &&pg);    // Produce GCompiled from processed GModel
};

}}

#endif // OPENCV_GAPI_GCOMPILER_HPP