text: // 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.
  #include "../precomp.hpp"
  
  #include "factory_parallel.hpp"
  
  #ifdef HAVE_TBB
  
  #include "parallel.hpp"
  #include "opencv2/core/parallel/backend/parallel_for.tbb.hpp"
  
  namespace cv { namespace parallel {
  
  static
  std::shared_ptr<cv::parallel::tbb::ParallelForBackend>& getInstance()
  {
      static std::shared_ptr<cv::parallel::tbb::ParallelForBackend> g_instance = std::make_shared<cv::parallel::tbb::ParallelForBackend>();
      return g_instance;
  }
  
  #ifndef BUILD_PLUGIN
  std::shared_ptr<cv::parallel::ParallelForAPI> createParallelBackendTBB()
  {
      return getInstance();
  }
  #endif
  
  }}  // namespace
  
  #ifdef BUILD_PLUGIN
  
  #define ABI_VERSION 0
  #define API_VERSION 0
  #include "plugin_parallel_api.hpp"
  
  static
  CvResult cv_getInstance(CV_OUT CvPluginParallelBackendAPI* handle) CV_NOEXCEPT
  {
      try
      {
          if (!handle)
              return CV_ERROR_FAIL;
          *handle = cv::parallel::getInstance().get();
          return CV_ERROR_OK;
      }
      catch (...)
      {
          return CV_ERROR_FAIL;
      }
  }
  
  static const OpenCV_Core_Parallel_Plugin_API plugin_api =
  {
      {
          sizeof(OpenCV_Core_Parallel_Plugin_API), ABI_VERSION, API_VERSION,
          CV_VERSION_MAJOR, CV_VERSION_MINOR, CV_VERSION_REVISION, CV_VERSION_STATUS,
          "TBB (interface " CVAUX_STR(TBB_INTERFACE_VERSION) ") OpenCV parallel plugin"
      },
      {
          /*  1*/cv_getInstance
      }
  };
  
  const OpenCV_Core_Parallel_Plugin_API* CV_API_CALL opencv_core_parallel_plugin_init_v0(int requested_abi_version, int requested_api_version, void* /*reserved=NULL*/) CV_NOEXCEPT
  {
      if (requested_abi_version == ABI_VERSION && requested_api_version <= API_VERSION)
          return &plugin_api;
      return NULL;
  }
  
  #endif  // BUILD_PLUGIN
  
  #endif  // HAVE_TBB
  