Pipeline.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 // standard
4 #include <map>
5 #include <memory>
6 #include <unordered_set>
7 #include <vector>
8 
9 // project
10 #include "AssetManager.hpp"
11 #include "Node.hpp"
15 
16 // shared
20 
21 namespace dai {
22 
23 class PipelineImpl {
24  friend class Pipeline;
25  friend class Node;
26 
27  public:
28  PipelineImpl() = default;
29  PipelineImpl(const PipelineImpl&) = default;
30 
31  private:
32  // static functions
33  static bool isSamePipeline(const Node::Output& out, const Node::Input& in);
34  static bool canConnect(const Node::Output& out, const Node::Input& in);
35 
36  // Functions
42  void setCameraTuningBlobPath(const dai::Path& path);
43  void setXLinkChunkSize(int sizeBytes);
44  void setSippBufferSize(int sizeBytes);
45  void setSippDmaBufferSize(int sizeBytes);
48 
49  // Access to nodes
50  std::vector<std::shared_ptr<const Node>> getAllNodes() const;
51  std::vector<std::shared_ptr<Node>> getAllNodes();
52  std::shared_ptr<const Node> getNode(Node::Id id) const;
53  std::shared_ptr<Node> getNode(Node::Id id);
54 
55  void serialize(PipelineSchema& schema, Assets& assets, std::vector<std::uint8_t>& assetStorage, SerializationType type = DEFAULT_SERIALIZATION_TYPE) const;
56  nlohmann::json serializeToJson() const;
57  void remove(std::shared_ptr<Node> node);
58 
59  std::vector<Node::Connection> getConnections() const;
60  void link(const Node::Output& out, const Node::Input& in);
61  void unlink(const Node::Output& out, const Node::Input& in);
62  void setCalibrationData(CalibrationHandler calibrationDataHandler);
64 
65  // Must be incremented and unique for each node
67  // Pipeline asset manager
69  // Optionally forced version
71  // Global pipeline properties
73  // Optimized for adding, searching and removing connections
74  using NodeMap = std::unordered_map<Node::Id, std::shared_ptr<Node>>;
76  using NodeConnectionMap = std::unordered_map<Node::Id, std::unordered_set<Node::Connection>>;
77  // Connection map, NodeId represents id of node connected TO (input)
79  // Board configuration
81 
82  // Template create function
83  template <class N>
84  std::shared_ptr<N> create(const std::shared_ptr<PipelineImpl>& itself) {
85  // Check that passed type 'N' is subclass of Node
86  static_assert(std::is_base_of<Node, N>::value, "Specified class is not a subclass of Node");
87  // Get unique id for this new node
88  auto id = getNextUniqueId();
89  // Create and store the node in the map
90  auto node = std::make_shared<N>(itself, id);
91  nodeMap[id] = node;
92  // Return shared pointer to this node
93  return node;
94  }
95 };
96 
100 class Pipeline {
101  std::shared_ptr<PipelineImpl> pimpl;
103  return pimpl.get();
104  }
105  const PipelineImpl* impl() const {
106  return pimpl.get();
107  }
108 
109  public:
113  Pipeline();
114  explicit Pipeline(const std::shared_ptr<PipelineImpl>& pimpl);
115 
117  Pipeline clone() const;
118 
123 
128 
129  // void loadAssets(AssetManager& assetManager);
130  void serialize(PipelineSchema& schema, Assets& assets, std::vector<std::uint8_t>& assetStorage) const {
131  impl()->serialize(schema, assets, assetStorage);
132  }
133 
135  nlohmann::json serializeToJson() const {
136  return impl()->serializeToJson();
137  }
138 
144  template <class N>
145  std::shared_ptr<N> create() {
146  return impl()->create<N>(pimpl);
147  }
148 
150  void remove(std::shared_ptr<Node> node) {
151  impl()->remove(node);
152  }
153 
155  std::vector<std::shared_ptr<const Node>> getAllNodes() const {
156  return impl()->getAllNodes();
157  }
159  std::vector<std::shared_ptr<Node>> getAllNodes() {
160  return impl()->getAllNodes();
161  }
162 
164  std::shared_ptr<const Node> getNode(Node::Id id) const {
165  return impl()->getNode(id);
166  }
168  std::shared_ptr<Node> getNode(Node::Id id) {
169  return impl()->getNode(id);
170  }
171 
173  std::vector<Node::Connection> getConnections() const {
174  return impl()->getConnections();
175  }
176 
180  return impl()->nodeConnectionMap;
181  }
182 
185  const NodeMap& getNodeMap() const {
186  return impl()->nodeMap;
187  }
188 
197  void link(const Node::Output& out, const Node::Input& in) {
198  impl()->link(out, in);
199  }
200 
209  void unlink(const Node::Output& out, const Node::Input& in) {
210  impl()->unlink(out, in);
211  }
212 
214  const AssetManager& getAssetManager() const {
215  return impl()->assetManager;
216  }
217 
220  return impl()->assetManager;
221  }
222 
225  impl()->forceRequiredOpenVINOVersion = version;
226  }
227 
233  void setCalibrationData(CalibrationHandler calibrationDataHandler) {
234  impl()->setCalibrationData(calibrationDataHandler);
235  }
236 
243  return impl()->getCalibrationData();
244  }
245 
249  }
250 
253  return impl()->getPipelineOpenVINOVersion();
254  }
255 
257  void setCameraTuningBlobPath(const dai::Path& path) {
258  impl()->setCameraTuningBlobPath(path);
259  }
260 
266  void setXLinkChunkSize(int sizeBytes) {
267  impl()->setXLinkChunkSize(sizeBytes);
268  }
269 
277  void setSippBufferSize(int sizeBytes) {
278  impl()->setSippBufferSize(sizeBytes);
279  }
280 
288  void setSippDmaBufferSize(int sizeBytes) {
289  impl()->setSippDmaBufferSize(sizeBytes);
290  }
291 
294  return impl()->isOpenVINOVersionCompatible(version);
295  }
296 
299  impl()->setBoardConfig(board);
300  }
301 
304  return impl()->getBoardConfig();
305  }
306 
309  return impl()->getDeviceConfig();
310  }
311 };
312 
313 } // namespace dai
dai::Pipeline::setSippDmaBufferSize
void setSippDmaBufferSize(int sizeBytes)
Definition: Pipeline.hpp:288
dai::PipelineImpl::getCalibrationData
CalibrationHandler getCalibrationData() const
Definition: Pipeline.cpp:461
dai::Pipeline::setBoardConfig
void setBoardConfig(BoardConfig board)
Sets board configuration.
Definition: Pipeline.hpp:298
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
dai::PipelineImpl::getNode
std::shared_ptr< const Node > getNode(Node::Id id) const
Definition: Pipeline.cpp:58
dai::Node::Id
std::int64_t Id
Node identificator. Unique for every node on a single Pipeline.
Definition: Node.hpp:35
dai::Pipeline::link
void link(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.hpp:197
dai::PipelineImpl::create
std::shared_ptr< N > create(const std::shared_ptr< PipelineImpl > &itself)
Definition: Pipeline.hpp:84
dai::Pipeline::NodeConnectionMap
PipelineImpl::NodeConnectionMap NodeConnectionMap
Definition: Pipeline.hpp:177
dai::DEFAULT_SERIALIZATION_TYPE
constexpr static auto DEFAULT_SERIALIZATION_TYPE
Definition: Serialization.hpp:32
dai::PipelineImpl::NodeMap
std::unordered_map< Node::Id, std::shared_ptr< Node > > NodeMap
Definition: Pipeline.hpp:74
dai::Pipeline::getAssetManager
const AssetManager & getAssetManager() const
Get pipelines AssetManager as reference.
Definition: Pipeline.hpp:214
dai::PipelineImpl::getPipelineSchema
PipelineSchema getPipelineSchema(SerializationType type=DEFAULT_SERIALIZATION_TYPE) const
Definition: Pipeline.cpp:120
dai::OpenVINO::Version
Version
OpenVINO Version supported version information.
Definition: OpenVINO.hpp:20
dai::Node
Abstract Node.
Definition: Node.hpp:29
dai::Pipeline::getRequiredOpenVINOVersion
tl::optional< OpenVINO::Version > getRequiredOpenVINOVersion() const
Get required OpenVINO version to run this pipeline. Can be none.
Definition: Pipeline.hpp:252
dai::Pipeline::remove
void remove(std::shared_ptr< Node > node)
Removes a node from pipeline.
Definition: Pipeline.hpp:150
dai::Pipeline::getAllNodes
std::vector< std::shared_ptr< const Node > > getAllNodes() const
Get a vector of all nodes.
Definition: Pipeline.hpp:155
dai::PipelineSchema
Definition: PipelineSchema.hpp:13
dai::Pipeline::getNode
std::shared_ptr< Node > getNode(Node::Id id)
Get node with id if it exists, nullptr otherwise.
Definition: Pipeline.hpp:168
dai::PipelineImpl::board
BoardConfig board
Definition: Pipeline.hpp:80
dai::OpenVINO::DEFAULT_VERSION
constexpr static const Version DEFAULT_VERSION
Main OpenVINO version.
Definition: OpenVINO.hpp:54
dai::PipelineImpl::isOpenVINOVersionCompatible
bool isOpenVINOVersionCompatible(OpenVINO::Version version) const
Definition: Pipeline.cpp:225
dai::Node::Output
Definition: Node.hpp:67
dai::Pipeline::setCalibrationData
void setCalibrationData(CalibrationHandler calibrationDataHandler)
Definition: Pipeline.hpp:233
dai::PipelineImpl::canConnect
static bool canConnect(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:370
dai::Pipeline::getConnections
std::vector< Node::Connection > getConnections() const
Get all connections.
Definition: Pipeline.hpp:173
dai::PipelineImpl::unlink
void unlink(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:434
dai::Pipeline::getAssetManager
AssetManager & getAssetManager()
Get pipelines AssetManager as reference.
Definition: Pipeline.hpp:219
dai::AssetManager
AssetManager can store assets and serialize.
Definition: AssetManager.hpp:33
dai::Pipeline::getNode
std::shared_ptr< const Node > getNode(Node::Id id) const
Get node with id if it exists, nullptr otherwise.
Definition: Pipeline.hpp:164
dai::Pipeline::getGlobalProperties
GlobalProperties getGlobalProperties() const
Definition: Pipeline.cpp:50
dai::Pipeline::setXLinkChunkSize
void setXLinkChunkSize(int sizeBytes)
Definition: Pipeline.hpp:266
dai::PipelineImpl::setCalibrationData
void setCalibrationData(CalibrationHandler calibrationDataHandler)
Definition: Pipeline.cpp:454
dai::PipelineImpl::setXLinkChunkSize
void setXLinkChunkSize(int sizeBytes)
Definition: Pipeline.cpp:303
dai::Pipeline::getOpenVINOVersion
OpenVINO::Version getOpenVINOVersion() const
Get possible OpenVINO version to run this pipeline.
Definition: Pipeline.hpp:247
dai::Pipeline::serializeToJson
nlohmann::json serializeToJson() const
Returns whole pipeline represented as JSON.
Definition: Pipeline.hpp:135
Device.hpp
dai::PipelineImpl::serializeToJson
nlohmann::json serializeToJson() const
Definition: Pipeline.cpp:103
dai::PipelineImpl::getNextUniqueId
Node::Id getNextUniqueId()
Definition: Pipeline.cpp:15
dai::Pipeline::getAllNodes
std::vector< std::shared_ptr< Node > > getAllNodes()
Get a vector of all nodes.
Definition: Pipeline.hpp:159
GlobalProperties.hpp
dai::PipelineImpl
Definition: Pipeline.hpp:23
dai::PipelineImpl::getAllNodes
std::vector< std::shared_ptr< const Node > > getAllNodes() const
Definition: Pipeline.cpp:71
dai::Pipeline::setOpenVINOVersion
void setOpenVINOVersion(OpenVINO::Version version)
Set a specific OpenVINO version to use with this pipeline.
Definition: Pipeline.hpp:224
dai::Pipeline::serialize
void serialize(PipelineSchema &schema, Assets &assets, std::vector< std::uint8_t > &assetStorage) const
Definition: Pipeline.hpp:130
dai::PipelineImpl::NodeConnectionMap
std::unordered_map< Node::Id, std::unordered_set< Node::Connection > > NodeConnectionMap
Definition: Pipeline.hpp:76
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::Pipeline::setSippBufferSize
void setSippBufferSize(int sizeBytes)
Definition: Pipeline.hpp:277
dai::PipelineImpl::setBoardConfig
void setBoardConfig(BoardConfig board)
Definition: Pipeline.cpp:315
dai::Node::Input
Definition: Node.hpp:147
dai::PipelineImpl::getBoardConfig
BoardConfig getBoardConfig() const
Definition: Pipeline.cpp:319
dai::Pipeline::getDeviceConfig
Device::Config getDeviceConfig() const
Get device configuration needed for this pipeline.
Definition: Pipeline.hpp:308
dai::PipelineImpl::getPipelineOpenVINOVersion
tl::optional< OpenVINO::Version > getPipelineOpenVINOVersion() const
Definition: Pipeline.cpp:234
nanorpc::core::type::id
std::uint64_t id
Definition: type.h:27
BoardConfig.hpp
dai::SerializationType
SerializationType
Definition: Serialization.hpp:27
dai::PipelineImpl::setSippDmaBufferSize
void setSippDmaBufferSize(int sizeBytes)
Definition: Pipeline.cpp:311
AssetManager.hpp
dai::PipelineImpl::setCameraTuningBlobPath
void setCameraTuningBlobPath(const dai::Path &path)
Definition: Pipeline.cpp:294
dai::PipelineImpl::assetManager
AssetManager assetManager
Definition: Pipeline.hpp:68
dai::Assets
Definition: Assets.hpp:22
nanorpc::core::detail::pack::meta::type
type
Definition: pack_meta.h:26
dai::PipelineImpl::nodeMap
NodeMap nodeMap
Definition: Pipeline.hpp:75
dai::CalibrationHandler
Definition: CalibrationHandler.hpp:24
dai::PipelineImpl::setSippBufferSize
void setSippBufferSize(int sizeBytes)
Definition: Pipeline.cpp:307
dai::Pipeline::Pipeline
Pipeline()
Definition: Pipeline.cpp:19
dai::PipelineImpl::globalProperties
GlobalProperties globalProperties
Definition: Pipeline.hpp:72
dai::Pipeline::getConnectionMap
const NodeConnectionMap & getConnectionMap() const
Get a reference to internal connection representation.
Definition: Pipeline.hpp:179
dai::PipelineImpl::link
void link(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:408
dai::Pipeline::getPipelineSchema
PipelineSchema getPipelineSchema(SerializationType type=DEFAULT_SERIALIZATION_TYPE) const
Definition: Pipeline.cpp:54
dai::Pipeline::getNodeMap
const NodeMap & getNodeMap() const
Get a reference to internal node map.
Definition: Pipeline.hpp:185
dai::Pipeline::isOpenVINOVersionCompatible
bool isOpenVINOVersionCompatible(OpenVINO::Version version) const
Checks whether a given OpenVINO version is compatible with the pipeline.
Definition: Pipeline.hpp:293
PipelineSchema.hpp
OpenVINO.hpp
dai::PipelineImpl::nodeConnectionMap
NodeConnectionMap nodeConnectionMap
Definition: Pipeline.hpp:78
dai::Pipeline::impl
const PipelineImpl * impl() const
Definition: Pipeline.hpp:105
tl::optional< OpenVINO::Version >
dai::BoardConfig
Definition: BoardConfig.hpp:23
dai::PipelineImpl::getDeviceConfig
Device::Config getDeviceConfig() const
Definition: Pipeline.cpp:287
CalibrationHandler.hpp
dai::DeviceBase::Config
Definition: DeviceBase.hpp:72
dai::GlobalProperties
Definition: GlobalProperties.hpp:12
dai::PipelineImpl::getConnections
std::vector< Node::Connection > getConnections() const
Definition: Pipeline.cpp:398
dai::PipelineImpl::latestId
Node::Id latestId
Definition: Pipeline.hpp:66
dai::Pipeline::NodeMap
PipelineImpl::NodeMap NodeMap
Definition: Pipeline.hpp:183
dai::Pipeline::setCameraTuningBlobPath
void setCameraTuningBlobPath(const dai::Path &path)
Set a camera IQ (Image Quality) tuning blob, used for all cameras.
Definition: Pipeline.hpp:257
dai::Pipeline::pimpl
std::shared_ptr< PipelineImpl > pimpl
Definition: Pipeline.hpp:101
dai::Pipeline::impl
PipelineImpl * impl()
Definition: Pipeline.hpp:102
dai::PipelineImpl::remove
void remove(std::shared_ptr< Node > node)
Definition: Pipeline.cpp:324
dai::PipelineImpl::PipelineImpl
PipelineImpl()=default
dai::PipelineImpl::serialize
void serialize(PipelineSchema &schema, Assets &assets, std::vector< std::uint8_t > &assetStorage, SerializationType type=DEFAULT_SERIALIZATION_TYPE) const
Definition: Pipeline.cpp:86
dai::PipelineImpl::isSamePipeline
static bool isSamePipeline(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:360
dai::Path
Represents paths on a filesystem; accepts utf-8, Windows utf-16 wchar_t, or std::filesystem::path.
Definition: Path.hpp:27
dai::Pipeline::clone
Pipeline clone() const
Clone the pipeline (Creates a copy)
Definition: Pipeline.cpp:24
tl::optional::value_or
constexpr T value_or(U &&u) const &
Returns the stored value if there is one, otherwise returns u
Definition: 3rdparty/tl/optional.hpp:1314
dai
Definition: CameraExposureOffset.hpp:6
Node.hpp
dai::Pipeline::getBoardConfig
BoardConfig getBoardConfig() const
Gets board configuration.
Definition: Pipeline.hpp:303
dai::PipelineImpl::forceRequiredOpenVINOVersion
tl::optional< OpenVINO::Version > forceRequiredOpenVINOVersion
Definition: Pipeline.hpp:70
dai::Pipeline::getCalibrationData
CalibrationHandler getCalibrationData() const
Definition: Pipeline.hpp:242
dai::Pipeline::unlink
void unlink(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.hpp:209


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19