rgb_mono_encoding.cpp
Go to the documentation of this file.
1 #include <csignal>
2 #include <iostream>
3 
4 // Includes common necessary includes for development using depthai library
5 #include "depthai/depthai.hpp"
6 
7 // Keyboard interrupt (Ctrl + C) detected
8 static std::atomic<bool> alive{true};
9 static void sigintHandler(int signum) {
10  alive = false;
11 }
12 
13 int main() {
14  using namespace std;
15  std::signal(SIGINT, &sigintHandler);
16 
17  // Create pipeline
18  dai::Pipeline pipeline;
19 
20  // Define sources and outputs
21  auto camRgb = pipeline.create<dai::node::ColorCamera>();
22  auto monoLeft = pipeline.create<dai::node::MonoCamera>();
23  auto monoRight = pipeline.create<dai::node::MonoCamera>();
24  auto ve1 = pipeline.create<dai::node::VideoEncoder>();
25  auto ve2 = pipeline.create<dai::node::VideoEncoder>();
26  auto ve3 = pipeline.create<dai::node::VideoEncoder>();
27 
28  auto ve1Out = pipeline.create<dai::node::XLinkOut>();
29  auto ve2Out = pipeline.create<dai::node::XLinkOut>();
30  auto ve3Out = pipeline.create<dai::node::XLinkOut>();
31 
32  ve1Out->setStreamName("ve1Out");
33  ve2Out->setStreamName("ve2Out");
34  ve3Out->setStreamName("ve3Out");
35 
36  // Properties
37  camRgb->setBoardSocket(dai::CameraBoardSocket::CAM_A);
38  monoLeft->setCamera("left");
39  monoRight->setCamera("right");
40  // Create encoders, one for each camera, consuming the frames and encoding them using H.264 / H.265 encoding
41  ve1->setDefaultProfilePreset(30, dai::VideoEncoderProperties::Profile::H264_MAIN);
44 
45  // Linking
46  monoLeft->out.link(ve1->input);
47  camRgb->video.link(ve2->input);
48  monoRight->out.link(ve3->input);
49  ve1->bitstream.link(ve1Out->input);
50  ve2->bitstream.link(ve2Out->input);
51  ve3->bitstream.link(ve3Out->input);
52 
53  // Connect to device and start pipeline
54  dai::Device device(pipeline);
55 
56  // Output queues will be used to get the encoded data from the output defined above
57  auto outQ1 = device.getOutputQueue("ve1Out", 30, true);
58  auto outQ2 = device.getOutputQueue("ve2Out", 30, true);
59  auto outQ3 = device.getOutputQueue("ve3Out", 30, true);
60 
61  // The .h264 / .h265 files are raw stream files (not playable yet)
62  auto videoFile1 = std::ofstream("mono1.h264", std::ios::binary);
63  auto videoFile2 = std::ofstream("color.h265", std::ios::binary);
64  auto videoFile3 = std::ofstream("mono2.h264", std::ios::binary);
65  cout << "Press Ctrl+C to stop encoding..." << endl;
66 
67  while(alive) {
68  auto out1 = outQ1->get<dai::ImgFrame>();
69  videoFile1.write((char*)out1->getData().data(), out1->getData().size());
70  auto out2 = outQ2->get<dai::ImgFrame>();
71  videoFile2.write((char*)out2->getData().data(), out2->getData().size());
72  auto out3 = outQ3->get<dai::ImgFrame>();
73  videoFile3.write((char*)out3->getData().data(), out3->getData().size());
74  }
75 
76  cout << "To view the encoded data, convert the stream file (.h264/.h265) into a video file (.mp4), using a command below:" << endl;
77  cout << "ffmpeg -framerate 30 -i mono1.h264 -c copy mono1.mp4" << endl;
78  cout << "ffmpeg -framerate 30 -i mono2.h264 -c copy mono2.mp4" << endl;
79  cout << "ffmpeg -framerate 30 -i color.h265 -c copy color.mp4" << endl;
80 
81  return 0;
82 }
dai::node::MonoCamera::out
Output out
Definition: MonoCamera.hpp:47
dai::node::VideoEncoder::bitstream
Output bitstream
Definition: VideoEncoder.hpp:30
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
sigintHandler
static void sigintHandler(int signum)
Definition: rgb_mono_encoding.cpp:9
dai::CameraBoardSocket::CAM_A
@ CAM_A
main
int main()
Definition: rgb_mono_encoding.cpp:13
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
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::node::VideoEncoder::setDefaultProfilePreset
void setDefaultProfilePreset(float fps, Properties::Profile profile)
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::ImgFrame
Definition: ImgFrame.hpp:25
dai::node::ColorCamera::video
Output video
Definition: ColorCamera.hpp:62
dai::Device
Definition: Device.hpp:21
dai::VideoEncoderProperties::Profile::H265_MAIN
@ H265_MAIN
std
Definition: Node.hpp:366
alive
static std::atomic< bool > alive
Definition: rgb_mono_encoding.cpp:8
dai::VideoEncoderProperties::Profile::H264_MAIN
@ H264_MAIN
dai::node::VideoEncoder
VideoEncoder node. Encodes frames into MJPEG, H264 or H265.
Definition: VideoEncoder.hpp:14
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::node::VideoEncoder::input
Input input
Definition: VideoEncoder.hpp:25
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