VideoEncoder.cpp
Go to the documentation of this file.
2 
3 // std
4 #include <stdexcept>
5 
6 // libraries
7 #include "spdlog/spdlog.h"
8 #include "utility/Logging.hpp"
9 
10 namespace dai {
11 namespace node {
12 
13 VideoEncoder::VideoEncoder(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId)
14  : VideoEncoder(par, nodeId, std::make_unique<VideoEncoder::Properties>()) {}
15 VideoEncoder::VideoEncoder(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId, std::unique_ptr<Properties> props)
16  : NodeCRTP<Node, VideoEncoder, VideoEncoderProperties>(par, nodeId, std::move(props)) {
17  setInputRefs({&input});
19 }
20 // node properties
22  properties.numFramesPool = frames;
23  // Set default input queue size as well
24  input.defaultQueueSize = frames;
25 }
26 
29 }
30 
31 // encoder properties
33  properties.rateCtrlMode = mode;
34 }
35 
37  properties.profile = profile;
38 }
39 
40 void VideoEncoder::setProfile(std::tuple<int, int> size, VideoEncoderProperties::Profile profile) {
41  (void)size;
42  logger::warn("VideoEncoder {}: passing 'size' is deprecated. It is auto-determined from first frame", __func__);
43  setProfile(profile);
44 }
45 
46 void VideoEncoder::setProfile(int width, int height, VideoEncoderProperties::Profile profile) {
47  (void)width;
48  (void)height;
49  logger::warn("VideoEncoder {}: passing 'width'/ 'height' is deprecated. The size is auto-determined from first frame", __func__);
50  setProfile(profile);
51 }
52 
53 void VideoEncoder::setBitrate(int bitrate) {
54  properties.bitrate = bitrate;
55 }
56 
57 void VideoEncoder::setBitrateKbps(int bitrateKbps) {
58  properties.bitrate = bitrateKbps * 1000;
59 }
60 
63 }
64 
65 void VideoEncoder::setNumBFrames(int numBFrames) {
66  properties.numBFrames = numBFrames;
67 }
68 
69 void VideoEncoder::setQuality(int quality) {
70  properties.quality = quality;
71 }
72 
73 void VideoEncoder::setLossless(bool lossless) {
74  properties.lossless = lossless;
75 }
76 
77 void VideoEncoder::setFrameRate(float frameRate) {
78  properties.frameRate = frameRate;
79 }
80 
81 void VideoEncoder::setMaxOutputFrameSize(int maxFrameSize) {
82  properties.outputFrameSize = maxFrameSize;
83 }
84 
86  return properties.rateCtrlMode;
87 }
88 
90  return properties.profile;
91 }
92 
94  return properties.bitrate;
95 }
96 
98  return properties.bitrate / 1000;
99 }
100 
103 }
104 
105 // int VideoEncoder::getMaxBitrate() const {
106 // return properties.maxBitrate;
107 //}
108 
110  return properties.numBFrames;
111 }
112 
114  return properties.quality;
115 }
116 
117 std::tuple<int, int> VideoEncoder::getSize() const {
118  logger::warn("VideoEncoder {} is deprecated. The size is auto-determined from first frame and not known upfront", __func__);
119  return {0, 0};
120 }
121 
123  logger::warn("VideoEncoder {} is deprecated. The size is auto-determined from first frame and not known upfront", __func__);
124  return 0;
125 }
126 
128  logger::warn("VideoEncoder {} is deprecated. The size is auto-determined from first frame and not known upfront", __func__);
129  return 0;
130 }
131 
133  return properties.frameRate;
134 }
135 
137  // Checks
138 
139  // Set properties
140  setProfile(profile);
141  setFrameRate(fps);
142 
143  switch(profile) {
145  properties.quality = 95;
146  break;
147 
152  // By default set keyframe frequency to equal fps
153  properties.keyframeFrequency = static_cast<int32_t>(fps);
154  // A default bitrate computed by firmware based on size and fps
155  setBitrate(0);
156  break;
157 
158  default:
159  break;
160  }
161 }
162 
163 void VideoEncoder::setDefaultProfilePreset(int width, int height, float fps, VideoEncoderProperties::Profile profile) {
164  (void)width;
165  (void)height;
166  logger::warn("VideoEncoder {}: passing 'width'/ 'height' is deprecated. The size is auto-determined from first frame", __func__);
167  setDefaultProfilePreset(fps, profile);
168 }
169 
170 void VideoEncoder::setDefaultProfilePreset(std::tuple<int, int> size, float fps, VideoEncoderProperties::Profile profile) {
171  (void)size;
172  logger::warn("VideoEncoder {}: passing 'width'/ 'height' is deprecated. The size is auto-determined from first frame", __func__);
173  setDefaultProfilePreset(fps, profile);
174 }
175 
177  return properties.lossless;
178 }
179 
182 }
183 
184 } // namespace node
185 } // namespace dai
dai::NodeCRTP< Node, VideoEncoder, VideoEncoderProperties >::properties
Properties & properties
Underlying properties.
Definition: Node.hpp:346
dai::node::VideoEncoder::bitstream
Output bitstream
Definition: VideoEncoder.hpp:30
dai::node::VideoEncoder::setQuality
void setQuality(int quality)
Definition: VideoEncoder.cpp:69
dai::VideoEncoderProperties::lossless
bool lossless
Definition: VideoEncoderProperties.hpp:66
VideoEncoder.hpp
dai::Node::setInputRefs
void setInputRefs(std::initializer_list< Input * > l)
fps
static constexpr int fps
Definition: rgb_depth_aligned.cpp:12
dai::Node
Abstract Node.
Definition: Node.hpp:29
dai::node::VideoEncoder::setBitrateKbps
void setBitrateKbps(int bitrateKbps)
Set output bitrate in kbps, for CBR rate control mode. 0 for auto (based on frame size and FPS)....
Definition: VideoEncoder.cpp:57
dai::node::VideoEncoder::setBitrate
void setBitrate(int bitrate)
Set output bitrate in bps, for CBR rate control mode. 0 for auto (based on frame size and FPS)....
Definition: VideoEncoder.cpp:53
dai::VideoEncoderProperties::Profile::H264_HIGH
@ H264_HIGH
dai::VideoEncoderProperties::quality
std::int32_t quality
Definition: VideoEncoderProperties.hpp:62
dai::node::VideoEncoder::setNumBFrames
void setNumBFrames(int numBFrames)
Set number of B frames to be inserted. Applicable only to H264 and H265 profiles.
Definition: VideoEncoder.cpp:65
dai::node::VideoEncoder::getProfile
Properties::Profile getProfile() const
Get profile.
Definition: VideoEncoder.cpp:89
dai::VideoEncoderProperties::Profile
Profile
Definition: VideoEncoderProperties.hpp:21
dai::logger::warn
void warn(const FormatString &fmt, Args &&...args)
Definition: Logging.hpp:84
dai::NodeCRTP
Definition: Node.hpp:342
dai::VideoEncoderProperties::Profile::MJPEG
@ MJPEG
dai::node::VideoEncoder::getSize
std::tuple< int, int > getSize() const
Get input size.
Definition: VideoEncoder.cpp:117
dai::Node::Input::defaultQueueSize
int defaultQueueSize
Definition: Node.hpp:156
dai::node::VideoEncoder::setProfile
void setProfile(Properties::Profile profile)
Set encoding profile.
DAI_SPAN_NAMESPACE_NAME::detail::size
constexpr auto size(const C &c) -> decltype(c.size())
Definition: span.hpp:167
dai::node::VideoEncoder::setDefaultProfilePreset
void setDefaultProfilePreset(float fps, Properties::Profile profile)
dai::node::VideoEncoder::out
Output out
Definition: VideoEncoder.hpp:35
dai::node::VideoEncoder::setLossless
void setLossless(bool lossless)
Definition: VideoEncoder.cpp:73
dai::node::VideoEncoder::getMaxOutputFrameSize
int getMaxOutputFrameSize() const
Definition: VideoEncoder.cpp:180
dai::VideoEncoderProperties::rateCtrlMode
RateControlMode rateCtrlMode
Definition: VideoEncoderProperties.hpp:70
dai::node::VideoEncoder::setKeyframeFrequency
void setKeyframeFrequency(int freq)
Definition: VideoEncoder.cpp:61
dai::node::VideoEncoder::getRateControlMode
Properties::RateControlMode getRateControlMode() const
Get rate control mode.
Definition: VideoEncoder.cpp:85
dai::VideoEncoderProperties::RateControlMode
RateControlMode
Definition: VideoEncoderProperties.hpp:16
dai::node::VideoEncoder::getNumBFrames
int getNumBFrames() const
Get number of B frames.
Definition: VideoEncoder.cpp:109
dai::VideoEncoderProperties::bitrate
std::int32_t bitrate
Definition: VideoEncoderProperties.hpp:28
dai::node::VideoEncoder::getHeight
int getHeight() const
Get input height.
Definition: VideoEncoder.cpp:127
dai::VideoEncoderProperties::numBFrames
std::int32_t numBFrames
Definition: VideoEncoderProperties.hpp:42
dai::VideoEncoderProperties::profile
Profile profile
Definition: VideoEncoderProperties.hpp:58
dai::Properties
Base Properties structure.
Definition: Properties.hpp:8
dai::node::VideoEncoder::getNumFramesPool
int getNumFramesPool() const
Definition: VideoEncoder.cpp:27
dai::VideoEncoderProperties::numFramesPool
std::uint32_t numFramesPool
Definition: VideoEncoderProperties.hpp:49
dai::node::VideoEncoder::getBitrateKbps
int getBitrateKbps() const
Get bitrate in kbps.
Definition: VideoEncoder.cpp:97
dai::Node::setOutputRefs
void setOutputRefs(std::initializer_list< Output * > l)
dai::VideoEncoderProperties::keyframeFrequency
std::int32_t keyframeFrequency
Definition: VideoEncoderProperties.hpp:32
dai::VideoEncoderProperties::frameRate
float frameRate
Definition: VideoEncoderProperties.hpp:74
dai::VideoEncoderProperties::Profile::H265_MAIN
@ H265_MAIN
dai::node::VideoEncoder::setMaxOutputFrameSize
void setMaxOutputFrameSize(int maxFrameSize)
Definition: VideoEncoder.cpp:81
dai::node::VideoEncoder::VideoEncoder
VideoEncoder(const std::shared_ptr< PipelineImpl > &par, int64_t nodeId)
Definition: VideoEncoder.cpp:13
dai::node::VideoEncoder::getLossless
bool getLossless() const
Get lossless mode. Applies only when using [M]JPEG profile.
Definition: VideoEncoder.cpp:176
std
Definition: Node.hpp:366
dai::node::VideoEncoder::getWidth
int getWidth() const
Get input width.
Definition: VideoEncoder.cpp:122
dai::node::VideoEncoder::getKeyframeFrequency
int getKeyframeFrequency() const
Get keyframe frequency.
Definition: VideoEncoder.cpp:101
dai::node::VideoEncoder::setFrameRate
void setFrameRate(float frameRate)
Definition: VideoEncoder.cpp:77
dai::node::VideoEncoder::setNumFramesPool
void setNumFramesPool(int frames)
Definition: VideoEncoder.cpp:21
dai::VideoEncoderProperties::Profile::H264_MAIN
@ H264_MAIN
dai::VideoEncoderProperties
Definition: VideoEncoderProperties.hpp:12
dai::node::VideoEncoder
VideoEncoder node. Encodes frames into MJPEG, H264 or H265.
Definition: VideoEncoder.hpp:14
dai::node::VideoEncoder::getBitrate
int getBitrate() const
Get bitrate in bps.
Definition: VideoEncoder.cpp:93
dai::node::VideoEncoder::input
Input input
Definition: VideoEncoder.hpp:25
dai::VideoEncoderProperties::Profile::H264_BASELINE
@ H264_BASELINE
Logging.hpp
dai::node::VideoEncoder::setRateControlMode
void setRateControlMode(Properties::RateControlMode mode)
Set rate control mode Applicable only to H264 and H265 profiles.
Definition: VideoEncoder.cpp:32
dai
Definition: CameraExposureOffset.hpp:6
dai::node::VideoEncoder::getQuality
int getQuality() const
Get quality.
Definition: VideoEncoder.cpp:113
dai::VideoEncoderProperties::outputFrameSize
std::int32_t outputFrameSize
Definition: VideoEncoderProperties.hpp:54
dai::node::VideoEncoder::getFrameRate
float getFrameRate() const
Get frame rate.
Definition: VideoEncoder.cpp:132


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