mjpeg_encoding_example.cpp
Go to the documentation of this file.
1 #include <iostream>
2 
3 // Includes common necessary includes for development using depthai library
4 #include "depthai/depthai.hpp"
5 
6 int main() {
7  using namespace std::chrono;
8 
9  // Create pipeline
10  dai::Pipeline pipeline;
11 
12  // Define sources and outputs
13  auto camRgb = pipeline.create<dai::node::ColorCamera>();
14  auto xout = pipeline.create<dai::node::XLinkOut>();
15  auto xout2 = pipeline.create<dai::node::XLinkOut>();
16  auto videnc = pipeline.create<dai::node::VideoEncoder>();
17 
18  xout->setStreamName("mjpeg");
19  xout2->setStreamName("preview");
20 
21  // ColorCamera
22  camRgb->setPreviewSize(300, 300);
24  // camRgb->setFps(5.0);
25  camRgb->setInterleaved(true);
26 
27  // VideoEncoder
28  videnc->setDefaultProfilePreset(30, dai::VideoEncoderProperties::Profile::MJPEG);
29 
30  // Linking
31  camRgb->video.link(videnc->input);
32  camRgb->preview.link(xout2->input);
33  videnc->bitstream.link(xout->input);
34 
35  // Connect to device and start pipeline
36  dai::Device device(pipeline);
37 
38  auto mjpegQueue = device.getOutputQueue("mjpeg", 8, false);
39  auto previewQueue = device.getOutputQueue("preview", 8, false);
40  while(true) {
41  auto t1 = steady_clock::now();
42  auto preview = previewQueue->get<dai::ImgFrame>();
43  auto t2 = steady_clock::now();
44  cv::imshow("preview", cv::Mat(preview->getHeight(), preview->getWidth(), CV_8UC3, preview->getData().data()));
45  auto t3 = steady_clock::now();
46  auto mjpeg = mjpegQueue->get<dai::ImgFrame>();
47  auto t4 = steady_clock::now();
48  cv::Mat decodedFrame = cv::imdecode(cv::Mat(mjpeg->getData()), cv::IMREAD_COLOR);
49  auto t5 = steady_clock::now();
50  cv::imshow("mjpeg", decodedFrame);
51 
52  int previewLatency = duration_cast<milliseconds>(steady_clock::now() - preview->getTimestamp()).count();
53  int mjpegLatency = duration_cast<milliseconds>(steady_clock::now() - preview->getTimestamp()).count();
54 
55  int ms1 = duration_cast<milliseconds>(t2 - t1).count();
56  int ms2 = duration_cast<milliseconds>(t3 - t2).count();
57  int ms3 = duration_cast<milliseconds>(t4 - t3).count();
58  int ms4 = duration_cast<milliseconds>(t5 - t4).count();
59  int loop = duration_cast<milliseconds>(t5 - t1).count();
60 
61  std::cout << ms1 << " " << ms2 << " " << ms3 << " " << ms4 << " loop: " << loop << " | Latencies - preview : " << previewLatency
62  << " mjpeg: " << mjpegLatency << std::endl;
63  int key = cv::waitKey(1);
64  if(key == 'q') {
65  return 0;
66  }
67  }
68  return 0;
69 }
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::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
dai::VideoEncoderProperties::Profile::MJPEG
@ MJPEG
dai::Device::getOutputQueue
std::shared_ptr< DataOutputQueue > getOutputQueue(const std::string &name)
Definition: Device.cpp:86
dai::node::XLinkOut::input
Input input
Definition: XLinkOut.hpp:27
depthai.hpp
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::ImgFrame
Definition: ImgFrame.hpp:25
dai::ColorCameraProperties::SensorResolution::THE_1080_P
@ THE_1080_P
1920 × 1080
dai::Device
Definition: Device.hpp:21
dai::node::VideoEncoder
VideoEncoder node. Encodes frames into MJPEG, H264 or H265.
Definition: VideoEncoder.hpp:14
main
int main()
Definition: mjpeg_encoding_example.cpp:6
dai::node::XLinkOut::setStreamName
void setStreamName(const std::string &name)
Definition: XLinkOut.cpp:13


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