encoded_frame_test.cpp
Go to the documentation of this file.
1 #include <catch2/catch_all.hpp>
2 #include <catch2/catch_test_macros.hpp>
3 #include <iostream>
4 
14 
15 dai::Pipeline getPipeline(dai::VideoEncoderProperties::Profile profile, unsigned int quality, bool lossless, unsigned int bitrate) {
16  dai::Pipeline pipeline;
17  auto camNode = pipeline.create<dai::node::ColorCamera>();
18  auto encNode = pipeline.create<dai::node::VideoEncoder>();
19  auto xlinkOut = pipeline.create<dai::node::XLinkOut>();
20  camNode->video.link(encNode->input);
21  encNode->out.link(xlinkOut->input);
22 
23  camNode->setVideoSize(1280, 720);
24  encNode->setProfile(profile);
25  encNode->setBitrate(bitrate);
26  encNode->setQuality(quality);
27  encNode->setLossless(lossless);
28  encNode->setKeyframeFrequency(30);
29  xlinkOut->setStreamName("out");
30 
31  return pipeline;
32 }
33 
34 TEST_CASE("OLD_OUTPUT") {
35  dai::Pipeline pipeline;
36  auto camNode = pipeline.create<dai::node::ColorCamera>();
37  auto encNode = pipeline.create<dai::node::VideoEncoder>();
38  auto xlinkOut = pipeline.create<dai::node::XLinkOut>();
39  camNode->video.link(encNode->input);
40  encNode->bitstream.link(xlinkOut->input);
41 
42  camNode->setVideoSize(1280, 720);
44  xlinkOut->setStreamName("out");
45 
46  dai::Device device(pipeline);
47 
48  auto outQ = device.getOutputQueue("out");
49  for(int i = 0; i < 100; ++i) {
50  REQUIRE_NOTHROW(outQ->get<dai::ImgFrame>());
51  }
52 }
53 
54 TEST_CASE("JPEG_ENCODING_LOSSLESS") {
56 
57  auto outQ = device.getOutputQueue("out");
58  for(int i = 0; i < 100; ++i) {
59  auto encfrm = outQ->get<dai::EncodedFrame>();
60  REQUIRE(encfrm->getProfile() == dai::EncodedFrame::Profile::JPEG);
61  REQUIRE(encfrm->getLossless() == true);
62  REQUIRE(encfrm->getQuality() == 30);
63  }
64 }
65 
66 TEST_CASE("JPEG_ENCODING_LOSSY") {
68 
69  auto outQ = device.getOutputQueue("out");
70  for(int i = 0; i < 100; ++i) {
71  auto encfrm = outQ->get<dai::EncodedFrame>();
72  REQUIRE(encfrm->getProfile() == dai::EncodedFrame::Profile::JPEG);
73  REQUIRE(encfrm->getLossless() == false);
74  REQUIRE(encfrm->getQuality() == 30);
75  }
76 }
77 
78 TEST_CASE("AVC_ENCODING") {
80 
81  auto outQ = device.getOutputQueue("out");
82  for(int i = 0; i < 100; ++i) {
83  auto encfrm = outQ->get<dai::EncodedFrame>();
84  REQUIRE(encfrm->getProfile() == dai::EncodedFrame::Profile::AVC);
85  REQUIRE(encfrm->getLossless() == false);
86  if(i % 30 == 0) REQUIRE(encfrm->getFrameType() == dai::EncodedFrame::FrameType::I);
87  REQUIRE(encfrm->getQuality() == 30);
88  REQUIRE(encfrm->getBitrate() == 8500000);
89  }
90 }
91 
92 TEST_CASE("HEVC_ENCODING") {
94 
95  auto outQ = device.getOutputQueue("out");
96  for(int i = 0; i < 100; ++i) {
97  auto encfrm = outQ->get<dai::EncodedFrame>();
98  REQUIRE(encfrm->getProfile() == dai::EncodedFrame::Profile::HEVC);
99  REQUIRE(encfrm->getLossless() == false);
100  if(i % 30 == 0) REQUIRE(encfrm->getFrameType() == dai::EncodedFrame::FrameType::I);
101  REQUIRE(encfrm->getQuality() == 30);
102  REQUIRE(encfrm->getBitrate() == 8500000);
103  }
104 }
105 
106 TEST_CASE("LINK_TO_BOTH") {
107  dai::Pipeline pipeline;
108  auto camNode = pipeline.create<dai::node::ColorCamera>();
109  auto encNode = pipeline.create<dai::node::VideoEncoder>();
110  auto xlinkOut1 = pipeline.create<dai::node::XLinkOut>();
111  auto xlinkOut2 = pipeline.create<dai::node::XLinkOut>();
112  camNode->video.link(encNode->input);
113  encNode->bitstream.link(xlinkOut1->input);
114  encNode->out.link(xlinkOut2->input);
115 
116  camNode->setVideoSize(1280, 720);
118  xlinkOut1->setStreamName("out1");
119  xlinkOut2->setStreamName("out2");
120 
121  REQUIRE_THROWS(dai::Device(pipeline));
122 }
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
Pipeline.hpp
dai::RawEncodedFrame::Profile::AVC
@ AVC
VideoEncoder.hpp
RawEncodedFrame.hpp
ImgFrame.hpp
dai::VideoEncoderProperties::Profile::H264_HIGH
@ H264_HIGH
dai::node::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
dai::EncodedFrame
Definition: EncodedFrame.hpp:17
VideoEncoderProperties.hpp
dai::VideoEncoderProperties::Profile
Profile
Definition: VideoEncoderProperties.hpp:21
dai::VideoEncoderProperties::Profile::MJPEG
@ MJPEG
dai::RawEncodedFrame::FrameType::I
@ I
getPipeline
dai::Pipeline getPipeline(dai::VideoEncoderProperties::Profile profile, unsigned int quality, bool lossless, unsigned int bitrate)
Definition: encoded_frame_test.cpp:15
Device.hpp
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
dai::RawEncodedFrame::Profile::JPEG
@ JPEG
dai::node::ColorCamera::setVideoSize
void setVideoSize(int width, int height)
Set video output size.
Definition: ColorCamera.cpp:131
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::ImgFrame
Definition: ImgFrame.hpp:25
ColorCamera.hpp
dai::Device
Definition: Device.hpp:21
dai::VideoEncoderProperties::Profile::H265_MAIN
@ H265_MAIN
XLinkOut.hpp
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::XLinkOut::setStreamName
void setStreamName(const std::string &name)
Definition: XLinkOut.cpp:13
dai::node::VideoEncoder::input
Input input
Definition: VideoEncoder.hpp:25
EncodedFrame.hpp
TEST_CASE
TEST_CASE("OLD_OUTPUT")
Definition: encoded_frame_test.cpp:34
dai::RawEncodedFrame::Profile::HEVC
@ HEVC


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