Skip to content

Commit 807f671

Browse files
committed
Added VideoEncoder node bindings
1 parent 254073c commit 807f671

File tree

5 files changed

+85
-12
lines changed

5 files changed

+85
-12
lines changed

depthai-core

Submodule depthai-core updated 70 files

src/DataQueueBindings.cpp

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,53 @@
11
#include "DataQueueBindings.hpp"
22

3-
// depthai-shared
3+
// std
4+
#include <chrono>
5+
6+
// depthai
47
#include "depthai/DataQueue.hpp"
58

69
void DataQueueBindings::bind(pybind11::module& m){
710

811
using namespace dai;
12+
using namespace std::chrono_literals;
13+
14+
// To prevent blocking whole python interpreter, blocking functions like 'get' and 'send'
15+
// are pooled with a reasonable delay and check for python interrupt signal in between.
916

1017
// Bind DataOutputQueue
1118
py::class_<DataOutputQueue, std::shared_ptr<DataOutputQueue>>(m, "DataOutputQueue")
12-
.def("get", static_cast<std::shared_ptr<RawBuffer>(DataOutputQueue::*)()>(&DataOutputQueue::get) )
19+
.def("get", [](DataOutputQueue& obj){
20+
21+
std::shared_ptr<RawBuffer> d = nullptr;
22+
do {
23+
// block for 100ms
24+
d = obj.get(100ms);
25+
// check if interrupt triggered in between
26+
if (PyErr_CheckSignals() != 0) throw py::error_already_set();
27+
} while(d == nullptr);
28+
29+
return d;
30+
})
1331
.def("has", static_cast<bool(DataOutputQueue::*)()>(&DataOutputQueue::has))
1432
.def("tryGet", static_cast<std::shared_ptr<RawBuffer>(DataOutputQueue::*)()>(&DataOutputQueue::tryGet))
1533
;
1634

1735
// Bind DataInputQueue
1836
py::class_<DataInputQueue, std::shared_ptr<DataInputQueue>>(m, "DataInputQueue")
19-
.def("send", &DataInputQueue::send)
20-
.def("sendAsync", &DataInputQueue::sendAsync)
37+
.def("send", [](DataInputQueue& obj, std::shared_ptr<RawBuffer> d){
38+
39+
bool sent = false;
40+
do {
41+
// block for 100ms
42+
sent = obj.send(d, 100ms);
43+
44+
// check if interrupt triggered in between
45+
if (PyErr_CheckSignals() != 0) throw py::error_already_set();
46+
47+
} while(!sent);
48+
49+
return d;
50+
})
2151
;
2252

2353
}

src/DeviceBindings.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "DeviceBindings.hpp"
22

33
// depthai
4-
#include "depthai/device.hpp"
4+
#include "depthai/Device.hpp"
55

66
void DeviceBindings::bind(pybind11::module& m){
77

@@ -14,8 +14,8 @@ void DeviceBindings::bind(pybind11::module& m){
1414
.def(py::init<const DeviceInfo&, std::string>(), py::arg("deviceDesc"), py::arg("pathToCmd"))
1515
.def("isPipelineRunning", &Device::isPipelineRunning)
1616
.def("startPipeline", &Device::startPipeline)
17-
.def("getOutputQueue", &Device::getOutputQueue)
18-
.def("getInputQueue", &Device::getInputQueue)
17+
.def("getOutputQueue", &Device::getOutputQueue, py::arg("name"), py::arg("maxSize") = 120, py::arg("overwrite") = false )
18+
.def("getInputQueue", &Device::getInputQueue, py::arg("name"), py::arg("maxSize") = 120, py::arg("overwrite") = false )
1919
.def("setCallback", &Device::setCallback)
2020
;
2121

src/pipeline/NodeBindings.cpp

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include "depthai/pipeline/node/XLinkOut.hpp"
66
#include "depthai/pipeline/node/ColorCamera.hpp"
77
#include "depthai/pipeline/node/NeuralNetwork.hpp"
8+
#include "depthai/pipeline/node/VideoEncoder.hpp"
9+
810

911
void NodeBindings::bind(pybind11::module& m){
1012

@@ -21,22 +23,25 @@ void NodeBindings::bind(pybind11::module& m){
2123

2224
py::class_<Node, std::shared_ptr<Node>>(m, "Node");
2325

26+
27+
// XLinkIn node
2428
py::class_<XLinkIn, Node, std::shared_ptr<XLinkIn>>(m, "XLinkIn")
2529
.def_readonly("out", &XLinkIn::out)
2630
.def("setStreamName", &XLinkIn::setStreamName)
2731
.def("setMaxDataSize", &XLinkIn::setMaxDataSize)
2832
.def("setNumFrames", &XLinkIn::setNumFrames)
2933
;
3034

31-
35+
// XLinkOut node
3236
py::class_<XLinkOut, Node, std::shared_ptr<XLinkOut>>(m, "XLinkOut")
33-
.def_readonly("input", &XLinkOut::in)
37+
.def_readonly("input", &XLinkOut::input)
3438
.def("setStreamName", &XLinkOut::setStreamName)
3539
.def("setFpsLimit", &XLinkOut::setFpsLimit)
3640
;
3741

42+
// NeuralNetwork node
3843
py::class_<NeuralNetwork, Node, std::shared_ptr<NeuralNetwork>>(m, "NeuralNetwork")
39-
.def_readonly("input", &NeuralNetwork::in)
44+
.def_readonly("input", &NeuralNetwork::input)
4045
.def_readonly("out", &NeuralNetwork::out)
4146
.def("setBlobPath", &NeuralNetwork::setBlobPath)
4247
.def("setNumPoolFrames", &NeuralNetwork::setNumPoolFrames)
@@ -66,6 +71,8 @@ void NodeBindings::bind(pybind11::module& m){
6671
.export_values()
6772
;
6873

74+
75+
// ColorCamera node
6976
py::class_<ColorCamera, Node, std::shared_ptr<ColorCamera>>(m, "ColorCamera")
7077
.def_readonly("video", &ColorCamera::video)
7178
.def_readonly("preview", &ColorCamera::preview)
@@ -78,6 +85,42 @@ void NodeBindings::bind(pybind11::module& m){
7885
;
7986

8087

88+
// VideoEncoder props
89+
py::class_<VideoEncoderProperties> videoEncoderProperties(m, "VideoEncoderProperties");
90+
videoEncoderProperties
91+
.def_readwrite("bitrate", &VideoEncoderProperties::bitrate)
92+
.def_readwrite("keyframeFrequency", &VideoEncoderProperties::keyframeFrequency)
93+
.def_readwrite("maxBitrate", &VideoEncoderProperties::maxBitrate)
94+
.def_readwrite("numBFrames", &VideoEncoderProperties::numBFrames)
95+
.def_readwrite("numFramesPool", &VideoEncoderProperties::numFramesPool)
96+
.def_readwrite("profile", &VideoEncoderProperties::profile)
97+
.def_readwrite("quality", &VideoEncoderProperties::quality)
98+
.def_readwrite("rateCtrlMode", &VideoEncoderProperties::rateCtrlMode)
99+
.def_readwrite("width", &VideoEncoderProperties::width)
100+
.def_readwrite("height", &VideoEncoderProperties::height)
101+
;
102+
103+
py::enum_<VideoEncoderProperties::Profile>(videoEncoderProperties, "Profile")
104+
.value("H264_BASELINE", VideoEncoderProperties::Profile::H264_BASELINE)
105+
.value("H264_HIGH", VideoEncoderProperties::Profile::H264_HIGH)
106+
.value("H264_MAIN", VideoEncoderProperties::Profile::H264_MAIN)
107+
.value("H265_MAIN", VideoEncoderProperties::Profile::H265_MAIN)
108+
.value("MJPEG", VideoEncoderProperties::Profile::MJPEG)
109+
.export_values()
110+
;
111+
112+
py::enum_<VideoEncoderProperties::RateControlMode>(videoEncoderProperties, "RateControlMode")
113+
.value("CBR", VideoEncoderProperties::RateControlMode::CBR)
114+
.value("VBR", VideoEncoderProperties::RateControlMode::VBR)
115+
.export_values()
116+
;
117+
118+
// VideoEncoder node
119+
py::class_<VideoEncoder, Node, std::shared_ptr<VideoEncoder>>(m, "VideoEncoder")
120+
.def_readonly("input", &VideoEncoder::input)
121+
.def_readonly("bitstream", &VideoEncoder::bitstream)
122+
.def("setDefaultProfilePreset", &VideoEncoder::setDefaultProfilePreset)
123+
;
81124

82125

83126
}

src/py_bindings.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// pybind11
1111

1212
// depthai-core
13-
#include "depthai/device.hpp"
13+
#include "depthai/Device.hpp"
1414
#include "depthai/build/version.hpp"
1515

1616
// project

0 commit comments

Comments
 (0)