encoding_max_limit.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  using namespace std::chrono;
16  std::signal(SIGINT, &sigintHandler);
17 
18  // Create pipeline
19  dai::Pipeline pipeline;
20 
21  // Define sources and outputs
22  auto camRgb = pipeline.create<dai::node::ColorCamera>();
23  auto monoLeft = pipeline.create<dai::node::MonoCamera>();
24  auto monoRight = pipeline.create<dai::node::MonoCamera>();
25  auto ve1 = pipeline.create<dai::node::VideoEncoder>();
26  auto ve2 = pipeline.create<dai::node::VideoEncoder>();
27  auto ve3 = pipeline.create<dai::node::VideoEncoder>();
28 
29  auto ve1Out = pipeline.create<dai::node::XLinkOut>();
30  auto ve2Out = pipeline.create<dai::node::XLinkOut>();
31  auto ve3Out = pipeline.create<dai::node::XLinkOut>();
32 
33  ve1Out->setStreamName("ve1Out");
34  ve2Out->setStreamName("ve2Out");
35  ve3Out->setStreamName("ve3Out");
36 
37  // Properties
38  camRgb->setBoardSocket(dai::CameraBoardSocket::CAM_A);
40  monoLeft->setCamera("left");
41  monoRight->setCamera("right");
42 
43  // Setting to 26fps will trigger error
44  ve1->setDefaultProfilePreset(25, dai::VideoEncoderProperties::Profile::H264_MAIN);
47 
48  // Linking
49  monoLeft->out.link(ve1->input);
50  camRgb->video.link(ve2->input);
51  monoRight->out.link(ve3->input);
52 
53  ve1->bitstream.link(ve1Out->input);
54  ve2->bitstream.link(ve2Out->input);
55  ve3->bitstream.link(ve3Out->input);
56 
57  // Connect to device and start pipeline
58  dai::Device device(pipeline);
59 
60  // Output queues will be used to get the encoded data from the output defined above
61  auto outQ1 = device.getOutputQueue("ve1Out", 30, true);
62  auto outQ2 = device.getOutputQueue("ve2Out", 30, true);
63  auto outQ3 = device.getOutputQueue("ve3Out", 30, true);
64 
65  // The .h264 / .h265 files are raw stream files (not playable yet)
66  auto videoFile1 = ofstream("mono1.h264", ios::binary);
67  auto videoFile2 = ofstream("color.h265", ios::binary);
68  auto videoFile3 = ofstream("mono2.h264", ios::binary);
69  cout << "Press Ctrl+C to stop encoding..." << endl;
70 
71  while(alive) {
72  auto out1 = outQ1->get<dai::ImgFrame>();
73  videoFile1.write((char*)out1->getData().data(), out1->getData().size());
74  auto out2 = outQ2->get<dai::ImgFrame>();
75  videoFile2.write((char*)out2->getData().data(), out2->getData().size());
76  auto out3 = outQ3->get<dai::ImgFrame>();
77  videoFile3.write((char*)out3->getData().data(), out3->getData().size());
78  }
79 
80  cout << "To view the encoded data, convert the stream file (.h264/.h265) into a video file (.mp4), using a command below:" << endl;
81  cout << "ffmpeg -framerate 25 -i mono1.h264 -c copy mono1.mp4" << endl;
82  cout << "ffmpeg -framerate 25 -i mono2.h264 -c copy mono2.mp4" << endl;
83  cout << "ffmpeg -framerate 25 -i color.h265 -c copy color.mp4" << endl;
84 
85  return 0;
86 }
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
alive
static std::atomic< bool > alive
Definition: encoding_max_limit.cpp:8
dai::CameraBoardSocket::CAM_A
@ CAM_A
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::ColorCameraProperties::SensorResolution::THE_4_K
@ THE_4_K
3840 × 2160
sigintHandler
static void sigintHandler(int signum)
Definition: encoding_max_limit.cpp:9
main
int main()
Definition: encoding_max_limit.cpp:13
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
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