Warp.cpp
Go to the documentation of this file.
2 namespace dai {
3 namespace node {
4 
5 Warp::Warp(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId) : Warp(par, nodeId, std::make_unique<Warp::Properties>()) {}
6 Warp::Warp(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId, std::unique_ptr<Properties> props)
7  : NodeCRTP<Node, Warp, WarpProperties>(par, nodeId, std::move(props)) {
9  setOutputRefs({&out});
10 }
11 
13  // properties.initialConfig = *rawConfig;
14  return properties;
15 }
16 
17 void Warp::setOutputSize(std::tuple<int, int> size) {
18  properties.outputWidth = std::get<0>(size);
19  properties.outputHeight = std::get<1>(size);
20 }
21 
22 void Warp::setOutputSize(int width, int height) {
23  setOutputSize({width, height});
24 }
25 
26 void Warp::setNumFramesPool(int numFramesPool) {
27  properties.numFramesPool = numFramesPool;
28 }
29 
30 void Warp::setMaxOutputFrameSize(int maxFrameSize) {
31  properties.outputFrameSize = maxFrameSize;
32 }
33 
34 void Warp::setWarpMesh(const float* meshData, int numMeshPoints, int width, int height) {
35  if(numMeshPoints < width * height) {
36  throw std::invalid_argument("Not enough points provided for specified width and height");
37  }
38 
39  // TODO(themarpe) - optimize
40  Asset asset("mesh");
41  asset.alignment = 64;
42 
43  // Align stride to 16B
44  constexpr auto ALIGNMENT = 16;
45  size_t meshStride = ((size_t)((sizeof(Point2f) * width)) + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1);
46  // Specify final mesh size
47  size_t meshSize = meshStride * height;
48 
49  // Create mesh data
50  asset.data = std::vector<uint8_t>(meshSize);
51 
52  // Fill out mesh points with stride
53  for(int i = 0; i < height; i++) {
54  for(int j = 0; j < width; j++) {
55  // get location in meshData
56  size_t inputMeshIndex = (i * width + j) * 2; // 2 float values per point
57 
58  // get output offset
59  size_t outputMeshOffset = (meshStride * i) + (j * sizeof(Point2f));
60  auto& point = reinterpret_cast<Point2f&>(asset.data.data()[outputMeshOffset]);
61 
62  // Asign reversed mesh coordinates (HW specified)
63  point.x = meshData[inputMeshIndex + 1];
64  point.y = meshData[inputMeshIndex + 0];
65  }
66  }
67 
68  properties.meshUri = assetManager.set(asset)->getRelativeUri();
69  properties.meshWidth = width;
70  properties.meshHeight = height;
71 }
72 
73 void Warp::setWarpMesh(const std::vector<Point2f>& meshData, int width, int height) {
74  setWarpMesh(reinterpret_cast<const float*>(meshData.data()), static_cast<int>(meshData.size()), width, height);
75 }
76 
77 void Warp::setWarpMesh(const std::vector<std::pair<float, float>>& meshData, int width, int height) {
78  setWarpMesh(reinterpret_cast<const float*>(meshData.data()), static_cast<int>(meshData.size()), width, height);
79 }
80 
81 void Warp::setHwIds(std::vector<int> ids) {
82  properties.warpHwIds = ids;
83 }
84 
85 std::vector<int> Warp::getHwIds() const {
86  return properties.warpHwIds;
87 }
88 
90  properties.interpolation = interpolation;
91 }
92 
95 }
96 
97 } // namespace node
98 } // namespace dai
dai::NodeCRTP< Node, Warp, WarpProperties >::properties
Properties & properties
Underlying properties.
Definition: Node.hpp:346
dai::WarpProperties::outputWidth
int outputWidth
Output width.
Definition: WarpProperties.hpp:17
dai::Asset::alignment
std::uint32_t alignment
Definition: AssetManager.hpp:20
dai::WarpProperties::interpolation
Interpolation interpolation
Interpolation type to use.
Definition: WarpProperties.hpp:39
dai::Node::setInputRefs
void setInputRefs(std::initializer_list< Input * > l)
dai::Node
Abstract Node.
Definition: Node.hpp:29
dai::WarpProperties
Definition: WarpProperties.hpp:15
dai::node::Warp::out
Output out
Definition: Warp.hpp:50
dai::node::Warp::setNumFramesPool
void setNumFramesPool(int numFramesPool)
Definition: Warp.cpp:26
dai::Node::assetManager
AssetManager assetManager
Definition: Node.hpp:291
dai::Asset::data
std::vector< std::uint8_t > data
Definition: AssetManager.hpp:19
dai::Point2f
Definition: Point2f.hpp:16
dai::NodeCRTP
Definition: Node.hpp:342
dai::node::Warp::setHwIds
void setHwIds(std::vector< int > ids)
Definition: Warp.cpp:81
dai::node::Warp::setOutputSize
void setOutputSize(std::tuple< int, int > size)
Definition: Warp.cpp:17
dai::WarpProperties::outputFrameSize
int outputFrameSize
Maximum output frame size in bytes (eg: 300x300 BGR image -> 300*300*3 bytes)
Definition: WarpProperties.hpp:23
dai::node::Warp::inputImage
Input inputImage
Definition: Warp.hpp:45
dai::Asset
Asset is identified with string key and can store arbitrary binary data.
Definition: AssetManager.hpp:15
dai::Interpolation
Interpolation
Definition: Interpolation.hpp:10
dai::WarpProperties::meshWidth
int meshWidth
Custom warp mesh width. Set to zero to disable.
Definition: WarpProperties.hpp:29
dai::node::Warp::setMaxOutputFrameSize
void setMaxOutputFrameSize(int maxFrameSize)
Definition: Warp.cpp:30
dai::node::Warp
Warp node. Capability to crop, resize, warp, ... incoming image frames.
Definition: Warp.hpp:16
DAI_SPAN_NAMESPACE_NAME::detail::size
constexpr auto size(const C &c) -> decltype(c.size())
Definition: span.hpp:167
dai::WarpProperties::meshHeight
int meshHeight
Custom warp mesh height. Set to zero to disable.
Definition: WarpProperties.hpp:31
dai::node::Warp::setWarpMesh
void setWarpMesh(const float *meshData, int numMeshPoints, int width, int height)
Definition: Warp.cpp:34
dai::AssetManager::set
std::shared_ptr< dai::Asset > set(Asset asset)
Definition: AssetManager.cpp:15
dai::WarpProperties::numFramesPool
int numFramesPool
Num frames in output pool.
Definition: WarpProperties.hpp:26
dai::WarpProperties::outputHeight
int outputHeight
Output height.
Definition: WarpProperties.hpp:20
dai::node::Warp::getProperties
Properties & getProperties()
Definition: Warp.cpp:12
dai::Properties
Base Properties structure.
Definition: Properties.hpp:8
dai::node::Warp::getInterpolation
dai::Interpolation getInterpolation() const
Retrieve which interpolation method to use.
Definition: Warp.cpp:93
Warp.hpp
dai::node::Warp::Warp
Warp(const std::shared_ptr< PipelineImpl > &par, int64_t nodeId)
Definition: Warp.cpp:5
dai::Node::setOutputRefs
void setOutputRefs(std::initializer_list< Output * > l)
dai::WarpProperties::meshUri
std::string meshUri
Custom warp mesh uri. Set to empty string to disable.
Definition: WarpProperties.hpp:33
dai::WarpProperties::warpHwIds
std::vector< int > warpHwIds
Warp HW IDs to use, if empty, use auto/default.
Definition: WarpProperties.hpp:36
std
Definition: Node.hpp:366
dai::node::Warp::setInterpolation
void setInterpolation(dai::Interpolation interpolation)
Definition: Warp.cpp:89
dai::Point2f::x
float x
Definition: Point2f.hpp:19
dai::node::Warp::getHwIds
std::vector< int > getHwIds() const
Retrieve which hardware warp engines to use.
Definition: Warp.cpp:85
dai
Definition: CameraExposureOffset.hpp:6


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