message_group_test.cpp
Go to the documentation of this file.
1 #include <catch2/catch_all.hpp>
2 #include <catch2/catch_test_macros.hpp>
3 #include <depthai/depthai.hpp>
7 
9 
10 TEST_CASE("Set and get messages") {
11  auto buf1Ts = std::chrono::steady_clock::now() + std::chrono::milliseconds(100);
12  auto buf2Ts = std::chrono::steady_clock::now() + std::chrono::milliseconds(200);
13  std::vector<unsigned char> buf1Data = {1, 2, 3};
14  std::vector<unsigned char> buf2Data = {4, 5, 6};
15  dai::MessageGroup msgGrp;
17  buf.setTimestamp(buf1Ts);
18  buf.setData(buf1Data);
19  msgGrp.add("buf1", buf);
20 
21  dai::ImgFrame img;
22  img.setTimestamp(buf2Ts);
23  img.setData(buf2Data);
24  img.setSize({5, 6});
25  msgGrp.add("img1", img);
26 
27  REQUIRE(msgGrp.get<dai::Buffer>("buf1")->getTimestamp() == buf1Ts);
28  REQUIRE(msgGrp.get<dai::ImgFrame>("img1")->getTimestamp() == buf2Ts);
29  REQUIRE(msgGrp.get<dai::Buffer>("buf1")->getData() == buf1Data);
30  REQUIRE(msgGrp.get<dai::ImgFrame>("img1")->getData() == buf2Data);
31  REQUIRE(msgGrp.get<dai::ImgFrame>("img1")->getWidth() == 5);
32  REQUIRE(msgGrp.get<dai::ImgFrame>("img1")->getHeight() == 6);
33 }
34 
35 TEST_CASE("Send large messages") {
36  dai::Pipeline pipeline;
37  auto camRgb = pipeline.create<dai::node::ColorCamera>();
38  auto left = pipeline.create<dai::node::MonoCamera>();
39  auto right = pipeline.create<dai::node::MonoCamera>();
40 
43 
44  camRgb->setFps(20);
45 
48  left->setFps(20);
51  right->setFps(20);
52 
53  auto sync = pipeline.create<dai::node::Sync>();
54  auto xout = pipeline.create<dai::node::XLinkOut>();
55  xout->setStreamName("out");
56 
57  sync->out.link(xout->input);
58  camRgb->isp.link(sync->inputs["rgb"]);
59  left->out.link(sync->inputs["left"]);
60  right->out.link(sync->inputs["right"]);
61 
62  dai::Device device(pipeline);
63  auto q = device.getOutputQueue("out", 8, true);
64 
65  bool hasTimedOut = false;
66  auto msg = q->get(std::chrono::seconds(1), hasTimedOut);
67  REQUIRE(!hasTimedOut);
68 }
69 
70 // TODO(asahtik): Bring back when the [issue](https://github.com/luxonis/depthai-core/issues/929) is fixed
71 // TEST_CASE("Sync - demux") {
72 // auto buf1Ts = std::chrono::steady_clock::now() + std::chrono::milliseconds(100);
73 // auto buf2Ts = std::chrono::steady_clock::now() + std::chrono::milliseconds(150);
74 //
75 // dai::Pipeline pipeline;
76 // auto xout1 = pipeline.create<dai::node::XLinkOut>();
77 // xout1->setStreamName("out1");
78 // auto xout2 = pipeline.create<dai::node::XLinkOut>();
79 // xout2->setStreamName("out2");
80 //
81 // auto demux = pipeline.create<dai::node::MessageDemux>();
82 //
83 // auto sync = pipeline.create<dai::node::Sync>();
84 // sync->setSyncThreshold(std::chrono::milliseconds(100));
85 //
86 // auto xin1 = pipeline.create<dai::node::XLinkIn>();
87 // xin1->setStreamName("in1");
88 // auto xin2 = pipeline.create<dai::node::XLinkIn>();
89 // xin2->setStreamName("in2");
90 //
91 // xin1->out.link(sync->inputs["buf1"]);
92 // xin2->out.link(sync->inputs["buf2"]);
93 // sync->out.link(demux->input);
94 // demux->outputs["buf1"].link(xout1->input);
95 // demux->outputs["buf2"].link(xout2->input);
96 //
97 // dai::Device device(pipeline);
98 //
99 // auto inQ1 = device.getInputQueue("in1");
100 // auto inQ2 = device.getInputQueue("in2");
101 // auto outQ1 = device.getOutputQueue("out1");
102 // auto outQ2 = device.getOutputQueue("out2");
103 //
104 // dai::Buffer buf1;
105 // buf1.setData({1, 2, 3, 4, 5});
106 // buf1.setTimestamp(buf1Ts);
107 //
108 // dai::ImgFrame img1;
109 // img1.setData({6, 7, 8, 9, 10});
110 // img1.setTimestamp(buf2Ts);
111 // img1.setSize({5, 6});
112 //
113 // inQ1->send(buf1);
114 // inQ2->send(img1);
115 //
116 // auto out1 = outQ1->get<dai::Buffer>();
117 // auto out2 = outQ2->get<dai::ImgFrame>();
118 //
119 // REQUIRE(out1->getTimestamp() == buf1Ts);
120 // REQUIRE(out2->getTimestamp() == buf2Ts);
121 // REQUIRE(out1->getData() == std::vector<unsigned char>{1, 2, 3, 4, 5});
122 // REQUIRE(out2->getData() == std::vector<unsigned char>{6, 7, 8, 9, 10});
123 // REQUIRE(out2->getWidth() == 5);
124 // REQUIRE(out2->getHeight() == 6);
125 // }
126 
127 TEST_CASE("MessageGroup ping-pong") {
128  auto buf1Ts = std::chrono::steady_clock::now() + std::chrono::milliseconds(100);
129  auto buf2Ts = std::chrono::steady_clock::now() + std::chrono::milliseconds(150);
130 
131  dai::Pipeline pipeline;
132  auto xout = pipeline.create<dai::node::XLinkOut>();
133  xout->setStreamName("out");
134 
135  auto xin = pipeline.create<dai::node::XLinkIn>();
136  xin->setStreamName("in");
137 
138  xin->out.link(xout->input);
139 
140  dai::Device device(pipeline);
141 
142  auto inQ = device.getInputQueue("in");
143  auto outQ = device.getOutputQueue("out");
144 
145  dai::Buffer buf1;
146  buf1.setData({1, 2, 3, 4, 5});
147  buf1.setTimestamp(buf1Ts);
148 
149  dai::ImgFrame img1;
150  img1.setData({6, 7, 8, 9, 10});
151  img1.setTimestamp(buf2Ts);
152  img1.setSize({5, 6});
153 
154  dai::MessageGroup msgGrp;
155  msgGrp.add("buf1", buf1);
156  msgGrp.add("img1", img1);
157 
158  inQ->send(msgGrp);
159 
160  auto out = outQ->get<dai::MessageGroup>();
161 
162  // REQUIRE(out->get<dai::Buffer>("buf1")->getTimestamp() == buf1Ts);
163  // REQUIRE(out->get<dai::ImgFrame>("img1")->getTimestamp() == buf2Ts);
164  REQUIRE(out->get<dai::Buffer>("buf1")->getData() == std::vector<unsigned char>{1, 2, 3, 4, 5});
165  REQUIRE(out->get<dai::ImgFrame>("img1")->getData() == std::vector<unsigned char>{6, 7, 8, 9, 10});
166  REQUIRE(out->get<dai::ImgFrame>("img1")->getWidth() == 5);
167  REQUIRE(out->get<dai::ImgFrame>("img1")->getHeight() == 6);
168 }
MessageGroup.hpp
dai::node::MonoCamera::out
Output out
Definition: MonoCamera.hpp:47
dai::node::XLinkOut
XLinkOut node. Sends messages over XLink.
Definition: XLinkOut.hpp:14
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
dai::node::MonoCamera::setFps
void setFps(float fps)
Definition: MonoCamera.cpp:98
dai::node::ColorCamera::setResolution
void setResolution(Properties::SensorResolution resolution)
Set sensor resolution.
Definition: ColorCamera.cpp:169
dai::MessageGroup
Definition: MessageGroup.hpp:16
dai::node::Sync
Definition: Sync.hpp:11
dai::node::ColorCamera::setFps
void setFps(float fps)
Definition: ColorCamera.cpp:176
dai::CameraBoardSocket::CAM_A
@ CAM_A
ImgFrame.hpp
CameraBoardSocket.hpp
TEST_CASE
TEST_CASE("Set and get messages")
Definition: message_group_test.cpp:10
dai::node::MonoCamera
MonoCamera node. For use with grayscale sensors.
Definition: MonoCamera.hpp:17
dai::Buffer::getData
std::vector< std::uint8_t > & getData() const
Get non-owning reference to internal buffer.
Definition: Buffer.cpp:13
dai::ImgFrame::setSize
ImgFrame & setSize(unsigned int width, unsigned int height)
Definition: pipeline/datatype/ImgFrame.cpp:109
dai::node::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
dai::Buffer::getTimestamp
std::chrono::time_point< std::chrono::steady_clock, std::chrono::steady_clock::duration > getTimestamp() const
Definition: Buffer.cpp:26
dai::ImgFrame::getTimestamp
std::chrono::time_point< std::chrono::steady_clock, std::chrono::steady_clock::duration > getTimestamp(CameraExposureOffset offset) const
Definition: pipeline/datatype/ImgFrame.cpp:20
dai::ColorCameraProperties::SensorResolution::THE_12_MP
@ THE_12_MP
4056 × 3040
dai::Buffer::setTimestamp
Buffer & setTimestamp(std::chrono::time_point< std::chrono::steady_clock, std::chrono::steady_clock::duration > timestamp)
Definition: Buffer.cpp:39
dai::CameraBoardSocket::CAM_B
@ CAM_B
dai::Device::getOutputQueue
std::shared_ptr< DataOutputQueue > getOutputQueue(const std::string &name)
Definition: Device.cpp:86
dai::ImgFrame::getHeight
unsigned int getHeight() const
Definition: pipeline/datatype/ImgFrame.cpp:56
depthai.hpp
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::node::XLinkIn::setStreamName
void setStreamName(const std::string &name)
Definition: XLinkIn.cpp:12
dai::node::ColorCamera::setBoardSocket
void setBoardSocket(CameraBoardSocket boardSocket)
Definition: ColorCamera.cpp:35
dai::node::MonoCamera::setResolution
void setResolution(Properties::SensorResolution resolution)
Set sensor resolution.
Definition: MonoCamera.cpp:82
dai::CameraBoardSocket::CAM_C
@ CAM_C
dai::ImgFrame
Definition: ImgFrame.hpp:25
dai::Buffer
Base message - buffer of binary data.
Definition: Buffer.hpp:13
dai::ImgFrame::setTimestamp
ImgFrame & setTimestamp(std::chrono::time_point< std::chrono::steady_clock, std::chrono::steady_clock::duration > timestamp)
Definition: pipeline/datatype/ImgFrame.cpp:80
dai::Device
Definition: Device.hpp:21
dai::MessageGroup::get
std::shared_ptr< T > get(const std::string &name)
Definition: MessageGroup.hpp:30
dai::node::XLinkIn
XLinkIn node. Receives messages over XLink.
Definition: XLinkIn.hpp:14
dai::Device::getInputQueue
std::shared_ptr< DataInputQueue > getInputQueue(const std::string &name)
Definition: Device.cpp:120
dai::Node::Output::link
void link(const Input &in)
Definition: Node.cpp:84
dai::node::XLinkOut::setStreamName
void setStreamName(const std::string &name)
Definition: XLinkOut.cpp:13
dai::Buffer::setData
void setData(const std::vector< std::uint8_t > &data)
Definition: Buffer.cpp:17
Buffer.hpp
dai::node::MonoCamera::setBoardSocket
void setBoardSocket(CameraBoardSocket boardSocket)
Definition: MonoCamera.cpp:27
dai::utility::buf
const typedef std::vector< std::uint8_t > buf
Definition: H26xParsers.cpp:40
dai::MonoCameraProperties::SensorResolution::THE_800_P
@ THE_800_P
dai::ImgFrame::getWidth
unsigned int getWidth() const
Definition: pipeline/datatype/ImgFrame.cpp:53
dai::node::Sync::out
Output out
Definition: Sync.hpp:26
dai::MessageGroup::add
void add(const std::string &name, const std::shared_ptr< ADatatype > &value)
Definition: MessageGroup.cpp:21


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