Blame view

3rdparty/opencv-4.5.4/modules/gapi/src/compiler/gcompiler.hpp 2.2 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  // 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/infer.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;
      cv::gapi::GNetPackage    m_all_networks;
  
      // Patterns built from transformations
      std::vector<std::unique_ptr<ade::Graph>> m_all_patterns;
  
  
      void validateInputMeta();
      void validateOutProtoArgs();
  
  public:
      // Metas may be empty in case when graph compiling for streaming
      // In this case graph get metas from first frame
      explicit GCompiler(const GComputation &c,
                               GMetaArgs    &&metas,
                               GCompileArgs &&args);
  
      // The method which does everything...
      GCompiled compile();
  
      // This too.
      GStreamingCompiled compileStreaming();
  
      // But those are 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
      static void compileIslands(ade::Graph &g, const cv::GCompileArgs &args);
      GCompiled   produceCompiled(GPtr &&pg);    // Produce GCompiled from processed GModel
      GStreamingCompiled  produceStreamingCompiled(GPtr &&pg); // Produce GStreamingCompiled from processed GMbodel
      static void runMetaPasses(ade::Graph &g, const cv::GMetaArgs &metas);
  
      static GPtr makeGraph(const cv::GComputation::Priv &);
  };
  
  }}
  
  #endif // OPENCV_GAPI_GCOMPILER_HPP