Pipeline.cpp
Go to the documentation of this file.
2 
5 
6 // std
7 #include <cassert>
8 #include <fstream>
9 
10 // libraries
11 #include "spdlog/fmt/fmt.h"
12 
13 namespace dai {
14 
16  return latestId++;
17 }
18 
19 Pipeline::Pipeline() : pimpl(std::make_shared<PipelineImpl>()) {
20  // Initialize library
21  initialize();
22 }
23 
25  // TODO(themarpe) - Copy assets
26 
28 
29  // Make a copy of PipelineImpl
30  clone.pimpl = std::make_shared<PipelineImpl>(*impl());
31 
32  // All IDs remain the same, just switch out the actual nodes with copies
33  // Copy all nodes
34  for(const auto& kv : impl()->nodeMap) {
35  const auto& id = kv.first;
36 
37  // Swap out with a copy
38  clone.pimpl->nodeMap[id] = impl()->nodeMap.at(id)->clone();
39  // Set parent to be the new pipeline
40  clone.pimpl->nodeMap[id]->parent = std::weak_ptr<PipelineImpl>(clone.pimpl);
41  }
42 
43  return clone;
44 }
45 
46 Pipeline::Pipeline(const std::shared_ptr<PipelineImpl>& newPimpl) {
47  pimpl = newPimpl;
48 }
49 
51  return pimpl->globalProperties;
52 }
53 
55  return pimpl->getPipelineSchema(type);
56 }
57 
58 std::shared_ptr<const Node> PipelineImpl::getNode(Node::Id id) const {
59  if(nodeMap.count(id) > 0) {
60  return nodeMap.at(id);
61  }
62  return nullptr;
63 }
64 std::shared_ptr<Node> PipelineImpl::getNode(Node::Id id) {
65  if(nodeMap.count(id) > 0) {
66  return nodeMap.at(id);
67  }
68  return nullptr;
69 }
70 
71 std::vector<std::shared_ptr<const Node>> PipelineImpl::getAllNodes() const {
72  std::vector<std::shared_ptr<const Node>> nodes;
73  for(const auto& kv : nodeMap) {
74  nodes.push_back(kv.second);
75  }
76  return nodes;
77 }
78 std::vector<std::shared_ptr<Node>> PipelineImpl::getAllNodes() {
79  std::vector<std::shared_ptr<Node>> nodes;
80  for(const auto& kv : nodeMap) {
81  nodes.push_back(kv.second);
82  }
83  return nodes;
84 }
85 
86 void PipelineImpl::serialize(PipelineSchema& schema, Assets& assets, std::vector<std::uint8_t>& assetStorage, SerializationType type) const {
87  // Set schema
88  schema = getPipelineSchema(type);
89 
90  // Serialize all asset managers into asset storage
91  assetStorage.clear();
92  AssetsMutable mutableAssets;
93  // Pipeline assets
94  assetManager.serialize(mutableAssets, assetStorage, "/pipeline/");
95  // Node assets
96  for(const auto& kv : nodeMap) {
97  kv.second->getAssetManager().serialize(mutableAssets, assetStorage, fmt::format("/node/{}/", kv.second->id));
98  }
99 
100  assets = mutableAssets;
101 }
102 
103 nlohmann::json PipelineImpl::serializeToJson() const {
104  PipelineSchema schema;
105  Assets assets;
106  std::vector<uint8_t> assetStorage;
107  serialize(schema, assets, assetStorage, SerializationType::JSON);
108 
109  nlohmann::json j;
110  j["pipeline"] = schema;
111  for(auto& node : j["pipeline"]["nodes"]) {
112  node[1]["properties"] = nlohmann::json::parse(node[1]["properties"].get<std::vector<uint8_t>>());
113  }
114 
115  j["assets"] = assets;
116  j["assetStorage"] = assetStorage;
117  return j;
118 }
119 
121  PipelineSchema schema;
123 
124  std::uint32_t latestIoId = 0;
125 
126  // Loop over nodes, and add them to schema
127  for(const auto& kv : nodeMap) {
128  const auto& node = kv.second;
129  // Create 'node' info
131  info.id = node->id;
132  info.name = node->getName();
133  node->getProperties().serialize(info.properties, type);
134 
135  // Create Io information
136  auto inputs = node->getInputs();
137  auto outputs = node->getOutputs();
138 
139  info.ioInfo.reserve(inputs.size() + outputs.size());
140 
141  // Add inputs
142  for(const auto& input : inputs) {
143  NodeIoInfo io;
144  io.id = ++latestIoId;
145  io.blocking = input.getBlocking();
146  io.queueSize = input.getQueueSize();
147  io.name = input.name;
148  io.group = input.group;
149  auto ioKey = std::make_tuple(io.group, io.name);
150 
151  io.waitForMessage = input.waitForMessage.value_or(input.defaultWaitForMessage);
152  switch(input.type) {
155  break;
158  break;
159  }
160 
161  if(info.ioInfo.count(ioKey) > 0) {
162  if(io.group == "") {
163  throw std::invalid_argument(fmt::format("'{}.{}' redefined. Inputs and outputs must have unique names", info.name, io.name));
164  } else {
165  throw std::invalid_argument(
166  fmt::format("'{}.{}[\"{}\"]' redefined. Inputs and outputs must have unique names", info.name, io.group, io.name));
167  }
168  }
169  info.ioInfo[ioKey] = io;
170  }
171 
172  // Add outputs
173  for(const auto& output : outputs) {
174  NodeIoInfo io;
175  io.id = ++latestIoId;
176  io.blocking = false;
177  io.name = output.name;
178  io.group = output.group;
179  auto ioKey = std::make_tuple(io.group, io.name);
180 
181  switch(output.type) {
184  break;
187  break;
188  }
189 
190  if(info.ioInfo.count(ioKey) > 0) {
191  if(io.group == "") {
192  throw std::invalid_argument(fmt::format("'{}.{}' redefined. Inputs and outputs must have unique names", info.name, io.name));
193  } else {
194  throw std::invalid_argument(
195  fmt::format("'{}.{}[\"{}\"]' redefined. Inputs and outputs must have unique names", info.name, io.group, io.name));
196  }
197  }
198  info.ioInfo[ioKey] = io;
199  }
200 
201  // At the end, add the constructed node information to the schema
202  schema.nodes[info.id] = info;
203  }
204 
205  // Create 'connections' info
206  // Loop through connections (output -> input) and add them to schema
207  for(const auto& kv : nodeConnectionMap) {
208  const auto& connections = kv.second;
209 
210  for(const auto& conn : connections) {
212  c.node1Id = conn.outputId;
213  c.node1Output = conn.outputName;
214  c.node1OutputGroup = conn.outputGroup;
215  c.node2Id = conn.inputId;
216  c.node2Input = conn.inputName;
217  c.node2InputGroup = conn.inputGroup;
218  schema.connections.push_back(c);
219  }
220  }
221 
222  return schema;
223 }
224 
226  auto ver = getPipelineOpenVINOVersion();
227  if(ver) {
228  return OpenVINO::areVersionsBlobCompatible(version, *ver);
229  } else {
230  return true;
231  }
232 }
233 
235  // Loop over nodes, and get the required information
237  std::string lastNodeNameWithRequiredVersion = "";
238  Node::Id lastNodeIdWithRequiredVersion = -1;
239 
240  for(const auto& kv : nodeMap) {
241  const auto& node = kv.second;
242 
243  // Check the required openvino version
244  auto requiredVersion = node->getRequiredOpenVINOVersion();
245  if(requiredVersion) {
247  // Check that forced openvino version is compatible with this nodes required version
249  std::string err = fmt::format("Pipeline - '{}' node with id: {}, isn't compatible with forced OpenVINO version", node->getName(), node->id);
250  throw std::logic_error(err.c_str());
251  }
252  } else {
253  // Keep track of required openvino versions, and make sure that they are all compatible
254  if(!version) {
255  version = *requiredVersion;
256  lastNodeIdWithRequiredVersion = node->id;
257  lastNodeNameWithRequiredVersion = node->getName();
258  } else {
259  // if some node already has an required version, then compare if they are compatible
260  if(!OpenVINO::areVersionsBlobCompatible(*version, *requiredVersion)) {
261  // if not compatible, then throw an error
262  std::string err = fmt::format("Pipeline - OpenVINO version required by '{}' node (id: {}), isn't compatible with '{}' node (id: {})",
263  lastNodeNameWithRequiredVersion,
264  lastNodeIdWithRequiredVersion,
265  node->getName(),
266  node->id);
267  throw std::logic_error(err.c_str());
268  }
269  }
270  }
271  }
272  }
273 
274  // After iterating over, return appropriate version
276  // Return forced version
278  } else if(version) {
279  // Return detected version
280  return version;
281  } else {
282  // Return null
283  return tl::nullopt;
284  }
285 }
286 
288  Device::Config config;
290  config.board = board;
291  return config;
292 }
293 
295  std::string assetKey = "camTuning";
296 
297  auto asset = assetManager.set(assetKey, path);
298 
299  globalProperties.cameraTuningBlobUri = asset->getRelativeUri();
300  globalProperties.cameraTuningBlobSize = static_cast<uint32_t>(asset->data.size());
301 }
302 
303 void PipelineImpl::setXLinkChunkSize(int sizeBytes) {
304  globalProperties.xlinkChunkSize = sizeBytes;
305 }
306 
307 void PipelineImpl::setSippBufferSize(int sizeBytes) {
308  globalProperties.sippBufferSize = sizeBytes;
309 }
310 
313 }
314 
316  board = boardCfg;
317 }
318 
320  return board;
321 }
322 
323 // Remove node capability
324 void PipelineImpl::remove(std::shared_ptr<Node> toRemove) {
325  // Search for this node in 'nodes' vector.
326  // If found, remove from vector
327 
328  // First check if node is on this pipeline (and that they are the same)
329  if(nodeMap.count(toRemove->id) > 0) {
330  if(nodeMap.at(toRemove->id) == toRemove) {
331  // its same object, (not same id but from different pipeline)
332 
333  // Steps to remove
334  // 1. Iterate and remove this nodes output connections
335  // 2. Remove this nodes entry in 'nodeConnectionMap'
336  // 3. Remove node from 'nodeMap'
337 
338  // 1. Iterate and remove this nodes output connections
339  for(auto& kv : nodeConnectionMap) {
340  for(auto it = kv.second.begin(); it != kv.second.end();) {
341  // check if output belongs to 'toRemove' node
342  if(it->outputId == toRemove->id) {
343  // remove this connection from set
344  it = kv.second.erase(it);
345  } else {
346  ++it;
347  }
348  }
349  }
350 
351  // 2. Remove this nodes entry in 'nodeConnectionMap'
352  nodeConnectionMap.erase(toRemove->id);
353 
354  // 3. Remove node from 'nodeMap'
355  nodeMap.erase(toRemove->id);
356  }
357  }
358 }
359 
361  // Check whether Output 'out' and Input 'in' are on the same pipeline.
362  // By checking whether their parent nodes are on same pipeline
363  auto outputPipeline = out.getParent().parent.lock();
364  if(outputPipeline != nullptr) {
365  return (outputPipeline == in.getParent().parent.lock());
366  }
367  return false;
368 }
369 
370 bool PipelineImpl::canConnect(const Node::Output& out, const Node::Input& in) {
371  // First check if on same pipeline
372  if(!isSamePipeline(out, in)) {
373  return false;
374  }
375 
376  // Check that IoType match up
377  if(out.type == Node::Output::Type::MSender && in.type == Node::Input::Type::MReceiver) return false;
378  if(out.type == Node::Output::Type::SSender && in.type == Node::Input::Type::SReceiver) return false;
379 
380  // Check that datatypes match up
381  for(const auto& outHierarchy : out.possibleDatatypes) {
382  for(const auto& inHierarchy : in.possibleDatatypes) {
383  // Check if datatypes match for current datatype
384  if(outHierarchy.datatype == inHierarchy.datatype) return true;
385 
386  // If output can produce descendants
387  if(outHierarchy.descendants && isDatatypeSubclassOf(outHierarchy.datatype, inHierarchy.datatype)) return true;
388 
389  // If input allows descendants
390  if(inHierarchy.descendants && isDatatypeSubclassOf(inHierarchy.datatype, outHierarchy.datatype)) return true;
391  }
392  }
393 
394  // If datatypes don't match up, return false
395  return false;
396 }
397 
398 std::vector<Node::Connection> PipelineImpl::getConnections() const {
399  std::vector<Node::Connection> connections;
400  for(const auto& kv : nodeConnectionMap) {
401  for(const auto& conn : kv.second) {
402  connections.push_back(conn);
403  }
404  }
405  return connections;
406 }
407 
408 void PipelineImpl::link(const Node::Output& out, const Node::Input& in) {
409  // First check if on same pipeline
410  if(!isSamePipeline(out, in)) {
411  throw std::logic_error(fmt::format("Nodes are not on same pipeline or one of nodes parent pipeline doesn't exists anymore"));
412  }
413 
414  // First check if can connect (must be on same pipeline and correct types)
415  if(!canConnect(out, in)) {
416  throw std::runtime_error(
417  fmt::format("Cannot link '{}.{}' to '{}.{}'", out.getParent().getName(), out.toString(), in.getParent().getName(), in.toString()));
418  }
419 
420  // Create 'Connection' object between 'out' and 'in'
421  Node::Connection connection(out, in);
422 
423  // Check if connection was already made - the following is possible as operator[] constructs the underlying set if it doesn't exist.
424  if(nodeConnectionMap[in.getParent().id].count(connection) > 0) {
425  // this means a connection was already made.
426  throw std::logic_error(
427  fmt::format("'{}.{}' already linked to '{}.{}'", out.getParent().getName(), out.toString(), in.getParent().getName(), in.toString()));
428  }
429 
430  // Otherwise all is set to add a new connection into nodeConnectionMap[in.getParent().id]
431  nodeConnectionMap[in.getParent().id].insert(connection);
432 }
433 
434 void PipelineImpl::unlink(const Node::Output& out, const Node::Input& in) {
435  // First check if on same pipeline
436  if(!isSamePipeline(out, in)) {
437  throw std::logic_error(fmt::format("Nodes are not on same pipeline or one of nodes parent pipeline doesn't exists anymore"));
438  }
439 
440  // Create 'Connection' object
441  Node::Connection connection(out, in);
442 
443  // Check if not connected (connection object doesn't exist in nodeConnectionMap)
444  if(nodeConnectionMap[in.getParent().id].count(connection) <= 0) {
445  // not connected
446  throw std::logic_error(
447  fmt::format("'{}.{}' not linked to '{}.{}'", out.getParent().getName(), out.toString(), in.getParent().getName(), in.toString()));
448  }
449 
450  // Otherwise if exists, remove this connection
451  nodeConnectionMap[in.getParent().id].erase(connection);
452 }
453 
455  /* if(!calibrationDataHandler.validateCameraArray()) {
456  throw std::runtime_error("Failed to validate the extrinsics connection. Enable debug mode for more information.");
457  } */
458  globalProperties.calibData = calibrationDataHandler.getEepromData();
459 }
460 
464  } else {
465  return CalibrationHandler();
466  }
467 }
468 } // namespace dai
dai::AssetsMutable
Definition: AssetManager.hpp:24
dai::PipelineImpl::getCalibrationData
CalibrationHandler getCalibrationData() const
Definition: Pipeline.cpp:461
tl::optional::value
TL_OPTIONAL_11_CONSTEXPR T & value() &
Returns the contained value if there is one, otherwise throws bad_optional_access.
Definition: 3rdparty/tl/optional.hpp:1289
dai::GlobalProperties::cameraTuningBlobSize
tl::optional< std::uint32_t > cameraTuningBlobSize
Definition: GlobalProperties.hpp:37
dai::Node::id
const Id id
Id of node.
Definition: Node.hpp:288
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
Pipeline.hpp
dai::PipelineImpl::getNode
std::shared_ptr< const Node > getNode(Node::Id id) const
Definition: Pipeline.cpp:58
dai::NodeConnectionSchema::node2Id
int64_t node2Id
Definition: NodeConnectionSchema.hpp:14
dai::Node::Id
std::int64_t Id
Node identificator. Unique for every node on a single Pipeline.
Definition: Node.hpp:35
dai::Node::Input::Type::MReceiver
@ MReceiver
dai::NodeIoInfo::blocking
bool blocking
Definition: NodeIoInfo.hpp:14
DAI_SPAN_NAMESPACE_NAME::get
constexpr auto get(span< E, S > s) -> decltype(s[N])
Definition: span.hpp:491
dai::GlobalProperties::sippBufferSize
uint32_t sippBufferSize
Definition: GlobalProperties.hpp:57
dai::Node::Output::possibleDatatypes
std::vector< DatatypeHierarchy > possibleDatatypes
Definition: Node.hpp:76
dai::Node::Input::type
Type type
Definition: Node.hpp:154
dai::AssetManager::serialize
void serialize(AssetsMutable &assets, std::vector< std::uint8_t > &assetStorage, std::string prefix="") const
Serializes.
Definition: AssetManager.cpp:111
dai::NodeObjInfo
NodeObj information structure.
Definition: NodeObjInfo.hpp:11
dai::Node::Output::getParent
Node & getParent()
Definition: Node.hpp:82
dai::PipelineImpl::getPipelineSchema
PipelineSchema getPipelineSchema(SerializationType type=DEFAULT_SERIALIZATION_TYPE) const
Definition: Pipeline.cpp:120
dai::DeviceBase::Config::board
BoardConfig board
Definition: DeviceBase.hpp:74
dai::OpenVINO::Version
Version
OpenVINO Version supported version information.
Definition: OpenVINO.hpp:20
dai::NodeConnectionSchema::node2Input
std::string node2Input
Definition: NodeConnectionSchema.hpp:16
dai::PipelineSchema
Definition: PipelineSchema.hpp:13
dai::logger::info
void info(const FormatString &fmt, Args &&...args)
Definition: Logging.hpp:78
dai::Node::Output::type
Type type
Definition: Node.hpp:74
dai::NodeConnectionSchema::node1OutputGroup
std::string node1OutputGroup
Definition: NodeConnectionSchema.hpp:12
dai::PipelineImpl::board
BoardConfig board
Definition: Pipeline.hpp:80
dai::PipelineImpl::isOpenVINOVersionCompatible
bool isOpenVINOVersionCompatible(OpenVINO::Version version) const
Definition: Pipeline.cpp:225
dai::Node::Output
Definition: Node.hpp:67
dai::GlobalProperties::xlinkChunkSize
int32_t xlinkChunkSize
Definition: GlobalProperties.hpp:48
tl::nullopt
static constexpr nullopt_t nullopt
Represents an empty optional.
Definition: 3rdparty/tl/optional.hpp:663
dai::PipelineImpl::canConnect
static bool canConnect(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:370
dai::PipelineImpl::unlink
void unlink(const Node::Output &out, const Node::Input &in)
Definition: Pipeline.cpp:434
dai::Pipeline::getGlobalProperties
GlobalProperties getGlobalProperties() const
Definition: Pipeline.cpp:50
dai::PipelineImpl::setCalibrationData
void setCalibrationData(CalibrationHandler calibrationDataHandler)
Definition: Pipeline.cpp:454
dai::isDatatypeSubclassOf
bool isDatatypeSubclassOf(DatatypeEnum parent, DatatypeEnum children)
Definition: DatatypeEnum.cpp:62
dai::PipelineImpl::setXLinkChunkSize
void setXLinkChunkSize(int sizeBytes)
Definition: Pipeline.cpp:303
dai::PipelineSchema::nodes
std::unordered_map< int64_t, NodeObjInfo > nodes
Definition: PipelineSchema.hpp:16
dai::Node::Input::possibleDatatypes
std::vector< DatatypeHierarchy > possibleDatatypes
Definition: Node.hpp:163
dai::SerializationType::JSON
@ JSON
dai::PipelineImpl::serializeToJson
nlohmann::json serializeToJson() const
Definition: Pipeline.cpp:103
dai::OpenVINO::areVersionsBlobCompatible
static bool areVersionsBlobCompatible(Version v1, Version v2)
Definition: OpenVINO.cpp:124
dai::PipelineImpl::getNextUniqueId
Node::Id getNextUniqueId()
Definition: Pipeline.cpp:15
dai::PipelineImpl
Definition: Pipeline.hpp:23
dai::PipelineImpl::getAllNodes
std::vector< std::shared_ptr< const Node > > getAllNodes() const
Definition: Pipeline.cpp:71
dai::NodeIoInfo::group
std::string group
Definition: NodeIoInfo.hpp:11
Initialization.hpp
dai::initialize
bool initialize()
Definition: Initialization.cpp:53
dai::PipelineSchema::globalProperties
GlobalProperties globalProperties
Definition: PipelineSchema.hpp:15
dai::NodeIoInfo
NodeIo informations such as name, type, ...
Definition: NodeIoInfo.hpp:8
dai::PipelineImpl::setBoardConfig
void setBoardConfig(BoardConfig board)
Definition: Pipeline.cpp:315
dai::NodeConnectionSchema
Definition: NodeConnectionSchema.hpp:10
dai::Node::Input::getParent
Node & getParent()
Definition: Node.hpp:194
dai::AssetManager::set
std::shared_ptr< dai::Asset > set(Asset asset)
Definition: AssetManager.cpp:15
dai::Node::Input
Definition: Node.hpp:147
dai::Node::Connection
Connection between an Input and Output.
Definition: Node.hpp:270
dai::Node::getName
virtual const char * getName() const =0
Retrieves nodes name.
dai::PipelineImpl::getBoardConfig
BoardConfig getBoardConfig() const
Definition: Pipeline.cpp:319
dai::PipelineImpl::getPipelineOpenVINOVersion
tl::optional< OpenVINO::Version > getPipelineOpenVINOVersion() const
Definition: Pipeline.cpp:234
dai::Node::Output::Type::SSender
@ SSender
nanorpc::core::type::id
std::uint64_t id
Definition: type.h:27
dai::SerializationType
SerializationType
Definition: Serialization.hpp:27
dai::Node::Output::toString
std::string toString() const
Output to string representation.
Definition: Node.cpp:43
dai::PipelineImpl::setSippDmaBufferSize
void setSippDmaBufferSize(int sizeBytes)
Definition: Pipeline.cpp:311
dai::NodeConnectionSchema::node2InputGroup
std::string node2InputGroup
Definition: NodeConnectionSchema.hpp:15
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::NodeIoInfo::name
std::string name
Definition: NodeIoInfo.hpp:12
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::NodeIoInfo::Type::SSender
@ SSender
dai::Node::Input::toString
std::string toString() const
Input to string representation.
Definition: Node.cpp:51
dai::PipelineSchema::connections
std::vector< NodeConnectionSchema > connections
Definition: PipelineSchema.hpp:14
dai::OpenVINO::VERSION_UNIVERSAL
@ VERSION_UNIVERSAL
Definition: OpenVINO.hpp:20
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::NodeIoInfo::id
uint32_t id
Definition: NodeIoInfo.hpp:17
dai::DeviceBase::Config::version
OpenVINO::Version version
Definition: DeviceBase.hpp:73
dai::PipelineImpl::nodeConnectionMap
NodeConnectionMap nodeConnectionMap
Definition: Pipeline.hpp:78
tl::optional< OpenVINO::Version >
dai::BoardConfig
Definition: BoardConfig.hpp:23
dai::PipelineImpl::getDeviceConfig
Device::Config getDeviceConfig() const
Definition: Pipeline.cpp:287
dai::NodeIoInfo::Type::SReceiver
@ SReceiver
std
Definition: Node.hpp:366
dai::Node::parent
std::weak_ptr< PipelineImpl > parent
Definition: Node.hpp:284
CalibrationHandler.hpp
dai::GlobalProperties::cameraTuningBlobUri
std::string cameraTuningBlobUri
Definition: GlobalProperties.hpp:41
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::CalibrationHandler::getEepromData
dai::EepromData getEepromData() const
Definition: CalibrationHandler.cpp:200
dai::PipelineImpl::latestId
Node::Id latestId
Definition: Pipeline.hpp:66
dai::NodeIoInfo::queueSize
int queueSize
Definition: NodeIoInfo.hpp:15
dai::Pipeline::pimpl
std::shared_ptr< PipelineImpl > pimpl
Definition: Pipeline.hpp:101
dai::NodeIoInfo::type
Type type
Definition: NodeIoInfo.hpp:13
dai::Pipeline::impl
PipelineImpl * impl()
Definition: Pipeline.hpp:102
dai::PipelineImpl::remove
void remove(std::shared_ptr< Node > node)
Definition: Pipeline.cpp:324
dai::NodeConnectionSchema::node1Id
int64_t node1Id
Definition: NodeConnectionSchema.hpp:11
dai::NodeIoInfo::Type::MReceiver
@ MReceiver
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::GlobalProperties::sippDmaBufferSize
uint32_t sippDmaBufferSize
Definition: GlobalProperties.hpp:65
dai::Path
Represents paths on a filesystem; accepts utf-8, Windows utf-16 wchar_t, or std::filesystem::path.
Definition: Path.hpp:27
dai::GlobalProperties::calibData
tl::optional< dai::EepromData > calibData
Definition: GlobalProperties.hpp:32
dai::NodeConnectionSchema::node1Output
std::string node1Output
Definition: NodeConnectionSchema.hpp:13
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::Node::Input::Type::SReceiver
@ SReceiver
dai::Node::Output::Type::MSender
@ MSender
dai::NodeIoInfo::Type::MSender
@ MSender
dai
Definition: CameraExposureOffset.hpp:6
dai::NodeIoInfo::waitForMessage
bool waitForMessage
Definition: NodeIoInfo.hpp:16
dai::PipelineImpl::forceRequiredOpenVINOVersion
tl::optional< OpenVINO::Version > forceRequiredOpenVINOVersion
Definition: Pipeline.hpp:70


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