queue_add_callback.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <queue>
3 
4 // Includes common necessary includes for development using depthai library
5 #include "depthai/depthai.hpp"
6 
7 struct callbackType {
8  std::string name;
9  cv::Mat frame;
10 };
11 
12 int main() {
13  // Create pipeline
14  dai::Pipeline pipeline;
15 
16  // Add all three cameras
17  auto camRgb = pipeline.create<dai::node::ColorCamera>();
18  auto left = pipeline.create<dai::node::MonoCamera>();
19  auto right = pipeline.create<dai::node::MonoCamera>();
20 
21  // Create XLink output
22  auto xout = pipeline.create<dai::node::XLinkOut>();
23  xout->setStreamName("frames");
24 
25  // Properties
26  camRgb->setPreviewSize(300, 300);
27  left->setCamera("left");
29  right->setCamera("right");
31 
32  // Stream all the camera streams through the same XLink node
33  camRgb->preview.link(xout->input);
34  left->out.link(xout->input);
35  right->out.link(xout->input);
36 
37  auto queue = std::queue<callbackType>();
38  std::mutex queueMtx;
39 
40  // Connect to device and start pipeline
41  dai::Device device(pipeline);
42 
43  auto newFrame = [&queueMtx, &queue](std::shared_ptr<dai::ADatatype> callback) {
44  if(dynamic_cast<dai::ImgFrame*>(callback.get()) != nullptr) {
45  std::unique_lock<std::mutex> lock(queueMtx);
46  callbackType cb;
47  dai::ImgFrame* imgFrame = static_cast<dai::ImgFrame*>(callback.get());
48  auto num = imgFrame->getInstanceNum();
49  cb.name = num == 0 ? "color" : (num == 1 ? "left" : "right");
50  cb.frame = imgFrame->getCvFrame();
51  queue.push(cb);
52  }
53  };
54 
55  // Add callback to the output queue "frames" for all newly arrived frames (color, left, right)
56  device.getOutputQueue("frames", 4, false)->addCallback(newFrame);
57 
58  while(true) {
60  {
61  std::unique_lock<std::mutex> lock(queueMtx);
62  if(!queue.empty()) {
63  data = queue.front();
64  queue.pop();
65  }
66  }
67 
68  if(!data.frame.empty()) {
69  cv::imshow(data.name.c_str(), data.frame);
70  }
71 
72  int key = cv::waitKey(1);
73  if(key == 'q' || key == 'Q') {
74  return 0;
75  }
76  }
77  return 0;
78 }
dai::node::MonoCamera::out
Output out
Definition: MonoCamera.hpp:47
dai::node::XLinkOut
XLinkOut node. Sends messages over XLink.
Definition: XLinkOut.hpp:14
dai::node::MonoCamera::setCamera
void setCamera(std::string name)
Definition: MonoCamera.cpp:36
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
dai::node::ColorCamera::setResolution
void setResolution(Properties::SensorResolution resolution)
Set sensor resolution.
Definition: ColorCamera.cpp:169
callbackType::name
std::string name
Definition: queue_add_callback.cpp:8
dai::node::MonoCamera
MonoCamera node. For use with grayscale sensors.
Definition: MonoCamera.hpp:17
dai::node::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
callbackType
Definition: queue_add_callback.cpp:7
DAI_SPAN_NAMESPACE_NAME::detail::data
constexpr auto data(C &c) -> decltype(c.data())
Definition: span.hpp:177
dai::Device::getOutputQueue
std::shared_ptr< DataOutputQueue > getOutputQueue(const std::string &name)
Definition: Device.cpp:86
dai::MonoCameraProperties::SensorResolution::THE_400_P
@ THE_400_P
depthai.hpp
dai::ImgFrame::getInstanceNum
unsigned int getInstanceNum() const
Definition: pipeline/datatype/ImgFrame.cpp:47
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::node::MonoCamera::setResolution
void setResolution(Properties::SensorResolution resolution)
Set sensor resolution.
Definition: MonoCamera.cpp:82
dai::ImgFrame::getCvFrame
void getCvFrame(T...)
Definition: ImgFrame.hpp:222
dai::ImgFrame
Definition: ImgFrame.hpp:25
main
int main()
Definition: queue_add_callback.cpp:12
callbackType::frame
cv::Mat frame
Definition: queue_add_callback.cpp:9
dai::Device
Definition: Device.hpp:21
dai::Node::Output::link
void link(const Input &in)
Definition: Node.cpp:84
dai::node::ColorCamera::setCamera
void setCamera(std::string name)
Definition: ColorCamera.cpp:44


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