Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/ColorCamera/rgb_camera_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ def clamp(num, v0, v1):
# Properties
camRgb.setVideoSize(640, 360)
camRgb.setPreviewSize(300, 300)
videoEncoder.setDefaultProfilePreset(camRgb.getVideoSize(), camRgb.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
stillEncoder.setDefaultProfilePreset(camRgb.getStillSize(), 1, dai.VideoEncoderProperties.Profile.MJPEG)
videoEncoder.setDefaultProfilePreset(camRgb.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
stillEncoder.setDefaultProfilePreset(1, dai.VideoEncoderProperties.Profile.MJPEG)

# Linking
camRgb.video.link(videoEncoder.input)
Expand Down
2 changes: 1 addition & 1 deletion examples/Script/script_http_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
cam = pipeline.create(dai.node.ColorCamera)
# VideoEncoder
jpeg = pipeline.create(dai.node.VideoEncoder)
jpeg.setDefaultProfilePreset(cam.getVideoSize(), cam.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
jpeg.setDefaultProfilePreset(cam.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)

# Script node
script = pipeline.create(dai.node.Script)
Expand Down
2 changes: 1 addition & 1 deletion examples/Script/script_mjpeg_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
cam = pipeline.create(dai.node.ColorCamera)
# VideoEncoder
jpeg = pipeline.create(dai.node.VideoEncoder)
jpeg.setDefaultProfilePreset(cam.getVideoSize(), cam.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
jpeg.setDefaultProfilePreset(cam.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)

# Script node
script = pipeline.create(dai.node.Script)
Expand Down
2 changes: 1 addition & 1 deletion examples/VideoEncoder/disparity_encoding.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

videoEnc = pipeline.create(dai.node.VideoEncoder)
# Depth resolution/FPS will be the same as mono resolution/FPS
videoEnc.setDefaultProfilePreset(monoLeft.getResolutionSize(), monoLeft.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
videoEnc.setDefaultProfilePreset(monoLeft.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
depth.disparity.link(videoEnc.input)

xout = pipeline.create(dai.node.XLinkOut)
Expand Down
6 changes: 3 additions & 3 deletions examples/VideoEncoder/encoding_max_limit.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
monoRight.setBoardSocket(dai.CameraBoardSocket.RIGHT)

# Setting to 26fps will trigger error
ve1.setDefaultProfilePreset(1280, 720, 25, dai.VideoEncoderProperties.Profile.H264_MAIN)
ve2.setDefaultProfilePreset(3840, 2160, 25, dai.VideoEncoderProperties.Profile.H265_MAIN)
ve3.setDefaultProfilePreset(1280, 720, 25, dai.VideoEncoderProperties.Profile.H264_MAIN)
ve1.setDefaultProfilePreset(25, dai.VideoEncoderProperties.Profile.H264_MAIN)
ve2.setDefaultProfilePreset(25, dai.VideoEncoderProperties.Profile.H265_MAIN)
ve3.setDefaultProfilePreset(25, dai.VideoEncoderProperties.Profile.H264_MAIN)

# Linking
monoLeft.out.link(ve1.input)
Expand Down
2 changes: 1 addition & 1 deletion examples/VideoEncoder/rgb_encoding.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# Properties
camRgb.setBoardSocket(dai.CameraBoardSocket.RGB)
camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_4_K)
videoEnc.setDefaultProfilePreset(3840, 2160, 30, dai.VideoEncoderProperties.Profile.H265_MAIN)
videoEnc.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H265_MAIN)

# Linking
camRgb.video.link(videoEnc.input)
Expand Down
2 changes: 1 addition & 1 deletion examples/VideoEncoder/rgb_full_resolution_saver.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
# Properties
camRgb.setBoardSocket(dai.CameraBoardSocket.RGB)
camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_4_K)
videoEnc.setDefaultProfilePreset(camRgb.getVideoSize(), camRgb.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)
videoEnc.setDefaultProfilePreset(camRgb.getFps(), dai.VideoEncoderProperties.Profile.MJPEG)

# Linking
camRgb.video.link(xoutRgb.input)
Expand Down
6 changes: 3 additions & 3 deletions examples/VideoEncoder/rgb_mono_encoding.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
monoLeft.setBoardSocket(dai.CameraBoardSocket.LEFT)
monoRight.setBoardSocket(dai.CameraBoardSocket.RIGHT)
# Create encoders, one for each camera, consuming the frames and encoding them using H.264 / H.265 encoding
ve1.setDefaultProfilePreset(1280, 720, 30, dai.VideoEncoderProperties.Profile.H264_MAIN)
ve2.setDefaultProfilePreset(1920, 1080, 30, dai.VideoEncoderProperties.Profile.H265_MAIN)
ve3.setDefaultProfilePreset(1280, 720, 30, dai.VideoEncoderProperties.Profile.H264_MAIN)
ve1.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H264_MAIN)
ve2.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H265_MAIN)
ve3.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H264_MAIN)

# Linking
monoLeft.out.link(ve1.input)
Expand Down
2 changes: 1 addition & 1 deletion examples/mixed/rgb_encoding_mobilenet.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
camRgb.setPreviewSize(300, 300)
camRgb.setInterleaved(False)

videoEncoder.setDefaultProfilePreset(1920, 1080, 30, dai.VideoEncoderProperties.Profile.H265_MAIN)
videoEncoder.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H265_MAIN)

nn.setConfidenceThreshold(0.5)
nn.setBlobPath(nnPath)
Expand Down
2 changes: 1 addition & 1 deletion examples/mixed/rgb_encoding_mono_mobilenet.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_1080_P)
monoRight.setBoardSocket(dai.CameraBoardSocket.RIGHT)
monoRight.setResolution(dai.MonoCameraProperties.SensorResolution.THE_720_P)
videoEncoder.setDefaultProfilePreset(1920, 1080, 30, dai.VideoEncoderProperties.Profile.H265_MAIN)
videoEncoder.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H265_MAIN)

nn.setConfidenceThreshold(0.5)
nn.setBlobPath(nnPath)
Expand Down
2 changes: 1 addition & 1 deletion examples/mixed/rgb_encoding_mono_mobilenet_depth.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
monoRight.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P)
monoLeft.setBoardSocket(dai.CameraBoardSocket.LEFT)
monoLeft.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P)
videoEncoder.setDefaultProfilePreset(1920, 1080, 30, dai.VideoEncoderProperties.Profile.H265_MAIN)
videoEncoder.setDefaultProfilePreset(30, dai.VideoEncoderProperties.Profile.H265_MAIN)

depth.initialConfig.setConfidenceThreshold(255)
depth.setRectifyEdgeFillColor(0) # Black, to better see the cutout
Expand Down
3 changes: 2 additions & 1 deletion src/DeviceBindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ void DeviceBindings::bind(pybind11::module& m, void* pCallstack){
.def("setSystemInformationLoggingRate", [](DeviceBase& d, float hz) { py::gil_scoped_release release; d.setSystemInformationLoggingRate(hz); }, py::arg("rateHz"), DOC(dai, DeviceBase, setSystemInformationLoggingRate))
.def("getSystemInformationLoggingRate", [](DeviceBase& d) { py::gil_scoped_release release; return d.getSystemInformationLoggingRate(); }, DOC(dai, DeviceBase, getSystemInformationLoggingRate))
.def("getConnectedCameras", [](DeviceBase& d) { py::gil_scoped_release release; return d.getConnectedCameras(); }, DOC(dai, DeviceBase, getConnectedCameras))
.def("getCameraSensorNames", [](DeviceBase& d) { py::gil_scoped_release release; return d.getCameraSensorNames(); }, DOC(dai, DeviceBase, getCameraSensorNames))
.def("getDdrMemoryUsage", [](DeviceBase& d) { py::gil_scoped_release release; return d.getDdrMemoryUsage(); }, DOC(dai, DeviceBase, getDdrMemoryUsage))
.def("getCmxMemoryUsage", [](DeviceBase& d) { py::gil_scoped_release release; return d.getCmxMemoryUsage(); }, DOC(dai, DeviceBase, getCmxMemoryUsage))
.def("getLeonCssHeapUsage", [](DeviceBase& d) { py::gil_scoped_release release; return d.getLeonCssHeapUsage(); }, DOC(dai, DeviceBase, getLeonCssHeapUsage))
Expand Down Expand Up @@ -316,4 +317,4 @@ void DeviceBindings::bind(pybind11::module& m, void* pCallstack){

;

}
}
62 changes: 53 additions & 9 deletions src/pipeline/NodeBindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ void NodeBindings::bind(pybind11::module& m, void* pCallstack){
.value("THE_1080_P", ColorCameraProperties::SensorResolution::THE_1080_P)
.value("THE_4_K", ColorCameraProperties::SensorResolution::THE_4_K)
.value("THE_12_MP", ColorCameraProperties::SensorResolution::THE_12_MP)
.value("THE_13_MP", ColorCameraProperties::SensorResolution::THE_13_MP)
;

colorCameraPropertiesColorOrder
Expand Down Expand Up @@ -266,6 +267,7 @@ void NodeBindings::bind(pybind11::module& m, void* pCallstack){
.value("THE_720_P", MonoCameraProperties::SensorResolution::THE_720_P)
.value("THE_800_P", MonoCameraProperties::SensorResolution::THE_800_P)
.value("THE_400_P", MonoCameraProperties::SensorResolution::THE_400_P)
.value("THE_480_P", MonoCameraProperties::SensorResolution::THE_480_P)
;

monoCameraProperties
Expand Down Expand Up @@ -317,8 +319,6 @@ void NodeBindings::bind(pybind11::module& m, void* pCallstack){
.def_readwrite("profile", &VideoEncoderProperties::profile)
.def_readwrite("quality", &VideoEncoderProperties::quality)
.def_readwrite("rateCtrlMode", &VideoEncoderProperties::rateCtrlMode)
.def_readwrite("width", &VideoEncoderProperties::width)
.def_readwrite("height", &VideoEncoderProperties::height)
;


Expand Down Expand Up @@ -862,13 +862,39 @@ void NodeBindings::bind(pybind11::module& m, void* pCallstack){
videoEncoder
.def_readonly("input", &VideoEncoder::input, DOC(dai, node, VideoEncoder, input), DOC(dai, node, VideoEncoder, input))
.def_readonly("bitstream", &VideoEncoder::bitstream, DOC(dai, node, VideoEncoder, bitstream), DOC(dai, node, VideoEncoder, bitstream))
.def("setDefaultProfilePreset", static_cast<void(VideoEncoder::*)(int, int, float, VideoEncoderProperties::Profile)>(&VideoEncoder::setDefaultProfilePreset), py::arg("width"), py::arg("height"), py::arg("fps"), py::arg("profile"), DOC(dai, node, VideoEncoder, setDefaultProfilePreset))
.def("setDefaultProfilePreset", static_cast<void(VideoEncoder::*)(std::tuple<int,int>, float, VideoEncoderProperties::Profile)>(&VideoEncoder::setDefaultProfilePreset), py::arg("size"), py::arg("fps"), py::arg("profile"), DOC(dai, node, VideoEncoder, setDefaultProfilePreset, 2))
.def("setDefaultProfilePreset", static_cast<void(VideoEncoder::*)(float, VideoEncoderProperties::Profile)>(&VideoEncoder::setDefaultProfilePreset), py::arg("fps"), py::arg("profile"), DOC(dai, node, VideoEncoder, setDefaultProfilePreset))
.def("setDefaultProfilePreset", [](VideoEncoder& v, int width, int height, float fps, VideoEncoderProperties::Profile profile){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input width/height no longer needed, automatically determined from first frame", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
v.setDefaultProfilePreset(width, height, fps, profile);
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, setDefaultProfilePreset, 2))
.def("setDefaultProfilePreset", [](VideoEncoder& v, std::tuple<int,int> size, float fps, VideoEncoderProperties::Profile profile){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input size no longer needed, automatically determined from first frame", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
v.setDefaultProfilePreset(size, fps, profile);
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, setDefaultProfilePreset, 3))
.def("setNumFramesPool", &VideoEncoder::setNumFramesPool, py::arg("frames"), DOC(dai, node, VideoEncoder, setNumFramesPool))
.def("getNumFramesPool", &VideoEncoder::getNumFramesPool, DOC(dai, node, VideoEncoder, getNumFramesPool))
.def("setRateControlMode", &VideoEncoder::setRateControlMode, py::arg("mode"), DOC(dai, node, VideoEncoder, setRateControlMode))
.def("setProfile", static_cast<void(VideoEncoder::*)(std::tuple<int,int>, VideoEncoder::Properties::Profile)>(&VideoEncoder::setProfile), py::arg("size"), py::arg("profile"), DOC(dai, node, VideoEncoder, setProfile))
.def("setProfile", static_cast<void(VideoEncoder::*)(int, int, VideoEncoder::Properties::Profile)>(&VideoEncoder::setProfile), py::arg("width"), py::arg("height"), py::arg("profile"), DOC(dai, node, VideoEncoder, setProfile, 2))
.def("setProfile", static_cast<void(VideoEncoder::*)(VideoEncoder::Properties::Profile)>(&VideoEncoder::setProfile), py::arg("profile"), DOC(dai, node, VideoEncoder, setProfile))
.def("setProfile", [](VideoEncoder& v, std::tuple<int,int> size, VideoEncoderProperties::Profile profile){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input width/height no longer needed, automatically determined from first frame", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
v.setProfile(size, profile);
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, setProfile, 2))
.def("setProfile", [](VideoEncoder& v, int width, int height, VideoEncoderProperties::Profile profile){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input width/height no longer needed, automatically determined from first frame", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
v.setProfile(width, height, profile);
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, setProfile, 3))
.def("setBitrate", &VideoEncoder::setBitrate, py::arg("bitrate"), DOC(dai, node, VideoEncoder, setBitrate))
.def("setBitrateKbps", &VideoEncoder::setBitrateKbps, py::arg("bitrateKbps"), DOC(dai, node, VideoEncoder, setBitrateKbps))
.def("setKeyframeFrequency", &VideoEncoder::setKeyframeFrequency, py::arg("freq"), DOC(dai, node, VideoEncoder, setKeyframeFrequency))
Expand All @@ -885,10 +911,28 @@ void NodeBindings::bind(pybind11::module& m, void* pCallstack){
//.def("getMaxBitrate", &VideoEncoder::getMaxBitrate)
.def("getNumBFrames", &VideoEncoder::getNumBFrames, DOC(dai, node, VideoEncoder, getNumBFrames))
.def("getQuality", &VideoEncoder::getQuality, DOC(dai, node, VideoEncoder, getQuality))
.def("getWidth", &VideoEncoder::getWidth, DOC(dai, node, VideoEncoder, getWidth))
.def("getHeight", &VideoEncoder::getHeight, DOC(dai, node, VideoEncoder, getHeight))
.def("getWidth", [](VideoEncoder& v){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input size no longer available, it's determined when first frame arrives", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
return v.getWidth();
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, getWidth))
.def("getHeight", [](VideoEncoder& v){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input size no longer available, it's determined when first frame arrives", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
return v.getHeight();
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, getHeight))
.def("getSize", [](VideoEncoder& v){
PyErr_WarnEx(PyExc_DeprecationWarning, "Input size no longer available, it's determined when first frame arrives", 1);
HEDLEY_DIAGNOSTIC_PUSH
HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
return v.getSize();
HEDLEY_DIAGNOSTIC_POP
}, DOC(dai, node, VideoEncoder, getSize))
.def("getFrameRate", &VideoEncoder::getFrameRate, DOC(dai, node, VideoEncoder, getFrameRate))
.def("getSize", &VideoEncoder::getSize, DOC(dai, node, VideoEncoder, getSize))
.def("getLossless", &VideoEncoder::getLossless, DOC(dai, node, VideoEncoder, getLossless))
;
// ALIAS
Expand Down