From 06a8c5090df2e6035d281a278e368b5d414fbdd1 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 12 Nov 2024 15:48:28 +0100
Subject: [PATCH 01/68] Fix ImgTransformations docs

---
 include/depthai/common/ImgTransformations.hpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/depthai/common/ImgTransformations.hpp b/include/depthai/common/ImgTransformations.hpp
index 40ae2aa10..8897a99f0 100644
--- a/include/depthai/common/ImgTransformations.hpp
+++ b/include/depthai/common/ImgTransformations.hpp
@@ -177,12 +177,12 @@ struct ImgTransformation {
     ImgTransformation& addCrop(int x, int y, int width, int height);
     /**
      * Add a pad transformation. Works like crop, but in reverse.
-     * @param x Padding on the left. The x coordinate of the top-left corner in the new image.
-     * @param y Padding on the top. The y coordinate of the top-left corner in the new image.
-     * @param width New image width
-     * @param height New image height
+     * @param top Padding on the top
+     * @param bottom Padding on the bottom
+     * @param left Padding on the left
+     * @param right Padding on the right
      */
-    ImgTransformation& addPadding(int x, int y, int width, int height);
+    ImgTransformation& addPadding(int top, int bottom, int left, int right);
     /**
      * Add a vertical flip transformation.
      */

From dbca122f8fc87d7f374ba1bb97a61eabcd0a9ed1 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 20 Nov 2024 16:23:23 +0100
Subject: [PATCH 02/68] ImgTransformations fixes & improvements

---
 include/depthai/common/ImgTransformations.hpp |  1 +
 src/pipeline/datatype/ImgTransformations.cpp  | 12 ++++++++++--
 src/pipeline/node/ImageManipV2.cpp            |  1 +
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/include/depthai/common/ImgTransformations.hpp b/include/depthai/common/ImgTransformations.hpp
index 8897a99f0..630f99232 100644
--- a/include/depthai/common/ImgTransformations.hpp
+++ b/include/depthai/common/ImgTransformations.hpp
@@ -204,6 +204,7 @@ struct ImgTransformation {
      */
     ImgTransformation& addScale(float scaleX, float scaleY);
     ImgTransformation& addSrcCrops(const std::vector<dai::RotatedRect>& crops);
+    ImgTransformation& setSize(size_t width, size_t height);
 
     /**
      * Remap a point from this transformation to another. If the intrinsics are different (e.g. different camera), the function will also use the intrinsics to
diff --git a/src/pipeline/datatype/ImgTransformations.cpp b/src/pipeline/datatype/ImgTransformations.cpp
index eef90507a..8fc2fc1e9 100644
--- a/src/pipeline/datatype/ImgTransformations.cpp
+++ b/src/pipeline/datatype/ImgTransformations.cpp
@@ -8,6 +8,8 @@
 
 namespace dai {
 
+constexpr float ROUND_UP_EPS = 1e-3f;
+
 // Function to check if a point is inside a rotated rectangle
 inline bool isPointInRotatedRectangle(const dai::Point2f& p, const dai::RotatedRect& rect) {
     auto theta = -rect.angle * (float)M_PI / 180.0f;
@@ -342,8 +344,8 @@ ImgTransformation& ImgTransformation::addRotation(float angle, dai::Point2f rota
     return *this;
 }
 ImgTransformation& ImgTransformation::addScale(float scaleX, float scaleY) {
-    width *= scaleX;
-    height *= scaleY;
+    width = width * scaleX + ROUND_UP_EPS;
+    height = height * scaleY + ROUND_UP_EPS;
     std::array<std::array<float, 3>, 3> scaleMatrix = {{{scaleX, 0, 0}, {0, scaleY, 0}, {0, 0, 1}}};
     addTransformation(scaleMatrix);
     return *this;
@@ -355,6 +357,12 @@ ImgTransformation& ImgTransformation::addSrcCrops(const std::vector<dai::Rotated
     return *this;
 }
 
+ImgTransformation& ImgTransformation::setSize(size_t width, size_t height) {
+    this->width = width;
+    this->height = height;
+    return *this;
+}
+
 bool ImgTransformation::isValid() const {
     return srcWidth > 0 && srcHeight > 0 && width > 0 && height > 0;
 }
diff --git a/src/pipeline/node/ImageManipV2.cpp b/src/pipeline/node/ImageManipV2.cpp
index 6312c9e24..a831e80f3 100644
--- a/src/pipeline/node/ImageManipV2.cpp
+++ b/src/pipeline/node/ImageManipV2.cpp
@@ -47,6 +47,7 @@ void ImageManipV2::run() {
             auto srcCrops = manip.getSrcCrops();
             dstFrame.transformation.addSrcCrops(srcCrops);
             dstFrame.transformation.addTransformation(manip.getMatrix());
+            dstFrame.transformation.setSize(dstSpecs.width, dstSpecs.height);
         });
 }
 

From ff149e6dbe3d3b8e9414a29fcea9eff5336da946 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 20 Nov 2024 16:24:30 +0100
Subject: [PATCH 03/68] Bump rvc2 fw

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index d520e5fd8..1528cb541 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "2211ddbe7b346eb82142837947967f371e42c4bf")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "c4bdfa91e614bf2d0a82ac7b950f0e7c0ee9dc7b")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 3945716cfd37332a2a736f30a52e6bd9c6415b57 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Thu, 21 Nov 2024 14:36:57 +0100
Subject: [PATCH 04/68] Added stereodepth example

---
 examples/cpp/CMakeLists.txt                |  3 +
 examples/cpp/StereoDepth/depth_preview.cpp | 65 ++++++++++++++++++++++
 2 files changed, 68 insertions(+)
 create mode 100644 examples/cpp/StereoDepth/depth_preview.cpp

diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt
index e94b71096..8ea1de176 100644
--- a/examples/cpp/CMakeLists.txt
+++ b/examples/cpp/CMakeLists.txt
@@ -273,6 +273,9 @@ dai_add_example(record_imu RVC2/Record/record_imu.cpp OFF OFF)
 dai_add_example(replay_video_meta RVC2/Replay/replay_video_meta.cpp OFF OFF)
 dai_add_example(replay_imu RVC2/Replay/replay_imu.cpp OFF OFF)
 
+# StereoDepth
+dai_add_example(depth_preview StereoDepth/depth_preview.cpp OFF OFF)
+
 # Thermal
 dai_add_example(thermal RVC2/Thermal/thermal.cpp OFF OFF)
 
diff --git a/examples/cpp/StereoDepth/depth_preview.cpp b/examples/cpp/StereoDepth/depth_preview.cpp
new file mode 100644
index 000000000..0466c6e08
--- /dev/null
+++ b/examples/cpp/StereoDepth/depth_preview.cpp
@@ -0,0 +1,65 @@
+#include <iostream>
+
+// Includes common necessary includes for development using depthai library
+#include "depthai/depthai.hpp"
+#include "depthai/pipeline/datatype/StereoDepthConfig.hpp"
+#include "depthai/pipeline/node/StereoDepth.hpp"
+#include "depthai/properties/StereoDepthProperties.hpp"
+
+// Closer-in minimum depth, disparity range is doubled (from 95 to 190):
+static std::atomic<bool> extended_disparity{false};
+// Better accuracy for longer distance, fractional disparity 32-levels:
+static std::atomic<bool> subpixel{false};
+// Better handling for occlusions:
+static std::atomic<bool> lr_check{true};
+
+int main() {
+    // Create pipeline
+    dai::Pipeline pipeline;
+
+    // Define sources and outputs
+    auto monoLeft = pipeline.create<dai::node::Camera>()->build(dai::CameraBoardSocket::CAM_B);
+    auto monoRight = pipeline.create<dai::node::Camera>()->build(dai::CameraBoardSocket::CAM_C);
+    auto depth = pipeline.create<dai::node::StereoDepth>();
+
+    // Properties
+    auto* lout = monoLeft->requestOutput({640, 400});
+    auto* rout = monoRight->requestOutput({640, 400});
+
+    // Create a node that will produce the depth map (using disparity output as it's easier to visualize depth this way)
+    depth->build(*lout, *rout, dai::node::StereoDepth::PresetMode::HIGH_DENSITY);
+    // Options: MEDIAN_OFF, KERNEL_3x3, KERNEL_5x5, KERNEL_7x7 (default)
+    depth->initialConfig.setMedianFilter(dai::StereoDepthConfig::MedianFilter::KERNEL_7x7);
+    depth->setLeftRightCheck(lr_check);
+    depth->setExtendedDisparity(extended_disparity);
+    depth->setSubpixel(subpixel);
+
+    // Output queue will be used to get the disparity frames from the outputs defined above
+    auto q = depth->disparity.createOutputQueue();
+    auto qleft = lout->createOutputQueue();
+
+    pipeline.start();
+
+    while(true) {
+        auto inDepth = q->get<dai::ImgFrame>();
+        auto inLeft = qleft->get<dai::ImgFrame>();
+        auto frame = inDepth->getFrame();
+        // Normalization for better visualization
+        frame.convertTo(frame, CV_8UC1, 255 / depth->initialConfig.getMaxDisparity());
+
+        std::cout << "Left type: " << inLeft->fb.str() << std::endl;
+
+        cv::imshow("disparity", frame);
+
+        // Available color maps: https://docs.opencv.org/3.4/d3/d50/group__imgproc__colormap.html
+        cv::applyColorMap(frame, frame, cv::COLORMAP_JET);
+        cv::imshow("disparity_color", frame);
+
+        int key = cv::waitKey(1);
+        if(key == 'q' || key == 'Q') {
+            break;
+        }
+    }
+    pipeline.stop();
+    return 0;
+}

From 6e76aeddf10fcd730390bd3a86dc6fa41f3798f0 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 27 Nov 2024 12:42:07 +0100
Subject: [PATCH 05/68] Bump rvc2 firmware

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake    | 2 +-
 examples/cpp/ImageManip/image_manip_v2_mod.cpp | 8 +++-----
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 1528cb541..d2b2636fe 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "c4bdfa91e614bf2d0a82ac7b950f0e7c0ee9dc7b")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "8332e3f133d658be288e417fd3cd84c0cb43867b")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")
diff --git a/examples/cpp/ImageManip/image_manip_v2_mod.cpp b/examples/cpp/ImageManip/image_manip_v2_mod.cpp
index 76d1ae62d..2c7a75ef3 100644
--- a/examples/cpp/ImageManip/image_manip_v2_mod.cpp
+++ b/examples/cpp/ImageManip/image_manip_v2_mod.cpp
@@ -14,13 +14,10 @@ int main(int argc, char** argv) {
     }
     dai::Pipeline pipeline(device);
 
-    auto camRgb = pipeline.create<dai::node::ColorCamera>();
+    auto camRgb = pipeline.create<dai::node::Camera>()->build(dai::CameraBoardSocket::CAM_A);
     auto display = pipeline.create<dai::node::Display>();
     auto manip = pipeline.create<dai::node::ImageManipV2>();
 
-    camRgb->setBoardSocket(dai::CameraBoardSocket::CAM_A);
-    camRgb->setResolution(dai::ColorCameraProperties::SensorResolution::THE_1080_P);
-
     manip->setMaxOutputFrameSize(4000000);
     manip->initialConfig.setOutputSize(1280, 720, dai::ImageManipConfigV2::ResizeMode::LETTERBOX);
     manip->initialConfig.setBackgroundColor(100, 100, 100);
@@ -29,7 +26,8 @@ int main(int argc, char** argv) {
     manip->initialConfig.addFlipVertical();
     manip->initialConfig.setFrameType(dai::ImgFrame::Type::RGB888p);
 
-    camRgb->video.link(manip->inputImage);
+    auto* rgbOut = camRgb->requestOutput({1920, 1080});
+    rgbOut->link(manip->inputImage);
     manip->out.link(display->input);
 
     pipeline.start();

From 7e70e819d8d45e44e2f5fbdd8b7635e2ff39029d Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Thu, 5 Dec 2024 09:10:14 +0100
Subject: [PATCH 06/68] Do not align depth in SpatialDetectionNetwork

---
 src/pipeline/node/SpatialDetectionNetwork.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pipeline/node/SpatialDetectionNetwork.cpp b/src/pipeline/node/SpatialDetectionNetwork.cpp
index 542fbd9f2..d2e1c949f 100644
--- a/src/pipeline/node/SpatialDetectionNetwork.cpp
+++ b/src/pipeline/node/SpatialDetectionNetwork.cpp
@@ -57,7 +57,7 @@ std::shared_ptr<SpatialDetectionNetwork> SpatialDetectionNetwork::build(const st
     neuralNetwork->build(camera, nnArchive, fps);
     detectionParser->setNNArchive(nnArchive);
     stereo->depth.link(inputDepth);
-    stereo->setDepthAlign(camera->getBoardSocket());
+    // stereo->setDepthAlign(camera->getBoardSocket());
     return std::static_pointer_cast<SpatialDetectionNetwork>(shared_from_this());
 }
 

From f66b46496866addf2a8ffacf65aa24f168067424 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 6 Dec 2024 12:13:03 +0100
Subject: [PATCH 07/68] Make aligned images sort of work

---
 bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp | 1 +
 cmake/Depthai/DepthaiDeviceSideConfig.cmake                | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp b/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
index 4c9451a7f..facafa0f1 100644
--- a/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
+++ b/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
@@ -201,6 +201,7 @@ void bind_imgframe(pybind11::module& m, void* pCallstack) {
         .def("getSourceWidth", &ImgFrame::getSourceWidth, DOC(dai, ImgFrame, getSourceWidth))
         .def("getSourceHeight", &ImgFrame::getSourceHeight, DOC(dai, ImgFrame, getSourceHeight))
         .def("getTransformation", [](ImgFrame& msg) {return msg.transformation;})
+        .def("validateTransformations", &ImgFrame::validateTransformations, DOC(dai, ImgFrame, validateTransformations))
 
 #ifdef DEPTHAI_HAVE_OPENCV_SUPPORT
         // The cast function itself does a copy, so we can avoid two copies by always not copying
diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 8797c30d5..9b8277ac0 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "b399a12aaf02228147364b7357a738f14fdd6225")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "b67e549e5d20ef69df6dffd9d0be859e4f2010e9")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 1a322b52847631b0e80f77cf105b17e3ce63db43 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 9 Dec 2024 11:01:06 +0100
Subject: [PATCH 08/68] Bump rvc2 fw

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 9b8277ac0..6d9210286 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "b67e549e5d20ef69df6dffd9d0be859e4f2010e9")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "7c267266bda12666d0b4b93dd6da5df05e95bcaf")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From df389c3556d91335035ed374d7cf73cafe82641d Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 9 Dec 2024 12:21:44 +0100
Subject: [PATCH 09/68] ImgTransformations ImageAlign improvements

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 6d9210286..e683ebe5a 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "7c267266bda12666d0b4b93dd6da5df05e95bcaf")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "33c800ee459dd04273f00b174b71560c8e6b82e7")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 2718bbb924037f7c04918588561bcceaf1942a24 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 9 Dec 2024 13:35:50 +0100
Subject: [PATCH 10/68] Added some setters to ImgTransformations

---
 include/depthai/common/ImgTransformations.hpp |  4 ++++
 src/pipeline/datatype/ImgTransformations.cpp  | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/include/depthai/common/ImgTransformations.hpp b/include/depthai/common/ImgTransformations.hpp
index 630f99232..55f37e55e 100644
--- a/include/depthai/common/ImgTransformations.hpp
+++ b/include/depthai/common/ImgTransformations.hpp
@@ -205,6 +205,10 @@ struct ImgTransformation {
     ImgTransformation& addScale(float scaleX, float scaleY);
     ImgTransformation& addSrcCrops(const std::vector<dai::RotatedRect>& crops);
     ImgTransformation& setSize(size_t width, size_t height);
+    ImgTransformation& setSourceSize(size_t width, size_t height);
+    ImgTransformation& setIntrinsicMatrix(std::array<std::array<float, 3>, 3> intrinsicMatrix);
+    ImgTransformation& setDistortionModel(CameraModel model);
+    ImgTransformation& setDistortionCoefficients(std::vector<float> coefficients);
 
     /**
      * Remap a point from this transformation to another. If the intrinsics are different (e.g. different camera), the function will also use the intrinsics to
diff --git a/src/pipeline/datatype/ImgTransformations.cpp b/src/pipeline/datatype/ImgTransformations.cpp
index 8fc2fc1e9..de9da30e4 100644
--- a/src/pipeline/datatype/ImgTransformations.cpp
+++ b/src/pipeline/datatype/ImgTransformations.cpp
@@ -362,6 +362,24 @@ ImgTransformation& ImgTransformation::setSize(size_t width, size_t height) {
     this->height = height;
     return *this;
 }
+ImgTransformation& ImgTransformation::setSourceSize(size_t width, size_t height) {
+    this->srcWidth = width;
+    this->srcHeight = height;
+    return *this;
+}
+ImgTransformation& ImgTransformation::setIntrinsicMatrix(std::array<std::array<float, 3>, 3> intrinsicMatrix) {
+    sourceIntrinsicMatrix = intrinsicMatrix;
+    sourceIntrinsicMatrixInv = getMatrixInverse(intrinsicMatrix);
+    return *this;
+}
+ImgTransformation& ImgTransformation::setDistortionModel(CameraModel model) {
+    distortionModel = model;
+    return *this;
+}
+ImgTransformation& ImgTransformation::setDistortionCoefficients(std::vector<float> coefficients) {
+    distortionCoefficients = coefficients;
+    return *this;
+}
 
 bool ImgTransformation::isValid() const {
     return srcWidth > 0 && srcHeight > 0 && width > 0 && height > 0;

From 9725f6e55357369d41e1df047e97f1dd933fd7ef Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 9 Dec 2024 16:06:25 +0100
Subject: [PATCH 11/68] Bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index acf9ce4a2..82193e790 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+501780ed87c927eadc6b1505f65731355d1d0ecd")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+985054c5ab25128d137f7205e2aa337d422ddffa")

From 276199a8c0632ca3f666d668b34ab203323ad4ed Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 10 Dec 2024 16:12:38 +0100
Subject: [PATCH 12/68] Add examples

---
 .../detection_network_remap.py                |  0
 examples/python/ImageAlign/aligned_remap.py   | 65 ++++++++++++++++
 .../python/StereoDepth/stereo_depth_remap.py  | 76 +++++++++++++++++++
 3 files changed, 141 insertions(+)
 rename examples/python/{RVC4 => }/DetectionNetwork/detection_network_remap.py (100%)
 create mode 100644 examples/python/ImageAlign/aligned_remap.py
 create mode 100644 examples/python/StereoDepth/stereo_depth_remap.py

diff --git a/examples/python/RVC4/DetectionNetwork/detection_network_remap.py b/examples/python/DetectionNetwork/detection_network_remap.py
similarity index 100%
rename from examples/python/RVC4/DetectionNetwork/detection_network_remap.py
rename to examples/python/DetectionNetwork/detection_network_remap.py
diff --git a/examples/python/ImageAlign/aligned_remap.py b/examples/python/ImageAlign/aligned_remap.py
new file mode 100644
index 000000000..af76e5c09
--- /dev/null
+++ b/examples/python/ImageAlign/aligned_remap.py
@@ -0,0 +1,65 @@
+import numpy as np
+import depthai as dai
+import cv2
+
+def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
+    """
+    Draws a rotated rectangle on the given frame.
+
+    Args:
+        frame (numpy.ndarray): The image/frame to draw on.
+        center (tuple): The (x, y) coordinates of the rectangle's center.
+        size (tuple): The (width, height) of the rectangle.
+        angle (float): The rotation angle of the rectangle in degrees (counter-clockwise).
+        color (tuple): The color of the rectangle in BGR format (e.g., (0, 255, 0) for green).
+        thickness (int): The thickness of the rectangle edges. Default is 2.
+    """
+    # Create a rotated rectangle
+    rect = ((center[0], center[1]), (size[0], size[1]), angle)
+
+    # Get the four vertices of the rotated rectangle
+    box = cv2.boxPoints(rect)
+    box = np.int0(box)  # Convert to integer coordinates
+
+    # Draw the rectangle on the frame
+    cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)
+
+with dai.Pipeline() as pipeline:
+    monoLeft = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
+    monoRight = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C)
+    align = pipeline.create(dai.node.ImageAlign)
+
+    monoLeftOut = monoLeft.requestOutput((640, 480))
+    monoRightOut = monoRight.requestOutput((640, 480))
+
+    monoLeftOut.link(align.input)
+    monoRightOut.link(align.inputAlignTo)
+
+    rightOut = monoRightOut.createOutputQueue()
+    alignOut = align.outputAligned.createOutputQueue()
+
+    pipeline.start()
+    while pipeline.isRunning():
+        rightFrame = rightOut.get()
+        alignedFrame = alignOut.get()
+
+        print(alignedFrame)
+
+        assert rightFrame.validateTransformations()
+        assert alignedFrame.validateTransformations()
+
+        right = rightFrame.getCvFrame()
+        depth = alignedFrame.getCvFrame()
+
+        rect = dai.RotatedRect(dai.Point2f(200, 100), dai.Size2f(200, 100), 10)
+        remappedRect = rightFrame.getTransformation().remapRectTo(alignedFrame.getTransformation(), rect)
+
+        draw_rotated_rectangle(right, (rect.center.x, rect.center.y), (rect.size.width, rect.size.height), rect.angle, (255, 0, 0))
+        draw_rotated_rectangle(depth, (remappedRect.center.x, remappedRect.center.y), (remappedRect.size.width, remappedRect.size.height), remappedRect.angle, (255, 0, 0))
+
+        cv2.imshow("right", right)
+        cv2.imshow("aligned", depth)
+
+        if cv2.waitKey(1) == ord('q'):
+            break
+    pipeline.stop()
diff --git a/examples/python/StereoDepth/stereo_depth_remap.py b/examples/python/StereoDepth/stereo_depth_remap.py
new file mode 100644
index 000000000..4e1f9700a
--- /dev/null
+++ b/examples/python/StereoDepth/stereo_depth_remap.py
@@ -0,0 +1,76 @@
+import depthai as dai
+import cv2
+import numpy as np
+
+def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
+    """
+    Draws a rotated rectangle on the given frame.
+
+    Args:
+        frame (numpy.ndarray): The image/frame to draw on.
+        center (tuple): The (x, y) coordinates of the rectangle's center.
+        size (tuple): The (width, height) of the rectangle.
+        angle (float): The rotation angle of the rectangle in degrees (counter-clockwise).
+        color (tuple): The color of the rectangle in BGR format (e.g., (0, 255, 0) for green).
+        thickness (int): The thickness of the rectangle edges. Default is 2.
+    """
+    # Create a rotated rectangle
+    rect = ((center[0], center[1]), (size[0], size[1]), angle)
+
+    # Get the four vertices of the rotated rectangle
+    box = cv2.boxPoints(rect)
+    box = np.int0(box)  # Convert to integer coordinates
+
+    # Draw the rectangle on the frame
+    cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)
+
+def processDepthFrame(depthFrame):
+    depth_downscaled = depthFrame[::4]
+    if np.all(depth_downscaled == 0):
+        min_depth = 0
+    else:
+        min_depth = np.percentile(depth_downscaled[depth_downscaled != 0], 1)
+    max_depth = np.percentile(depth_downscaled, 99)
+    depthFrameColor = np.interp(depthFrame, (min_depth, max_depth), (0, 255)).astype(np.uint8)
+    return cv2.applyColorMap(depthFrameColor, cv2.COLORMAP_HOT)
+
+with dai.Pipeline() as pipeline:
+    monoLeft = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
+    monoRight = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C)
+    stereo = pipeline.create(dai.node.StereoDepth)
+
+    stereo.setDefaultProfilePreset(dai.node.StereoDepth.PresetMode.HIGH_DENSITY)
+    stereo.setDepthAlign(dai.CameraBoardSocket.RGB)
+
+    monoLeftOut = monoLeft.requestOutput((640, 480))
+    monoRightOut = monoRight.requestOutput((640, 480))
+
+    monoLeftOut.link(stereo.left)
+    monoRightOut.link(stereo.right)
+
+    rightOut = monoRightOut.createOutputQueue()
+    stereoOut = stereo.depth.createOutputQueue()
+
+    pipeline.start()
+    while pipeline.isRunning():
+        rightFrame = rightOut.get()
+        stereoFrame = stereoOut.get()
+
+        assert rightFrame.getTransformation().isValid()
+        assert stereoFrame.getTransformation().isValid()
+
+        right = rightFrame.getCvFrame()
+        depth = processDepthFrame(stereoFrame.getCvFrame())
+
+        rect = dai.RotatedRect(dai.Point2f(300, 200), dai.Size2f(200, 100), 10)
+        remappedRect = rightFrame.getTransformation().remapRectTo(stereoFrame.getTransformation(), rect)
+
+        draw_rotated_rectangle(right, (rect.center.x, rect.center.y), (rect.size.width, rect.size.height), rect.angle, (255, 0, 0))
+        draw_rotated_rectangle(depth, (remappedRect.center.x, remappedRect.center.y), (remappedRect.size.width, remappedRect.size.height), remappedRect.angle, (255, 0, 0))
+
+        cv2.imshow("right", right)
+        cv2.imshow("depth", depth)
+
+        if cv2.waitKey(1) == ord('q'):
+            break
+    pipeline.stop()

From 4b8acf9fadf31ca33fee61b2aeec74ca1f198985 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 10 Dec 2024 16:26:04 +0100
Subject: [PATCH 13/68] Bump rvc2 fw

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index e683ebe5a..83836b1a9 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "33c800ee459dd04273f00b174b71560c8e6b82e7")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "f8c26a69711ffb3765226f7b373c9929ae97e829")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 7f3ae782f5943a2f8cab10f84fffe983a3735b5c Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Tue, 10 Dec 2024 20:37:42 +0200
Subject: [PATCH 14/68] Add enableUndistortion flag to ImgFrameCapabilities

---
 .../python/src/capabilities/ImgFrameCapabilityBindings.cpp     | 1 +
 include/depthai/capabilities/ImgFrameCapability.hpp            | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/bindings/python/src/capabilities/ImgFrameCapabilityBindings.cpp b/bindings/python/src/capabilities/ImgFrameCapabilityBindings.cpp
index 3bd7807d9..d9f3a53bd 100644
--- a/bindings/python/src/capabilities/ImgFrameCapabilityBindings.cpp
+++ b/bindings/python/src/capabilities/ImgFrameCapabilityBindings.cpp
@@ -27,6 +27,7 @@ void ImgFrameCapabilityBindings::bind(pybind11::module& m, void* pCallstack) {
         .def_readwrite("fps", &ImgFrameCapability::fps)
         .def_readwrite("type", &ImgFrameCapability::type)
         .def_readwrite("resizeMode", &ImgFrameCapability::resizeMode)
+        .def_readwrite("enableUndistortion", &ImgFrameCapability::enableUndistortion)
 
         ;
 }
diff --git a/include/depthai/capabilities/ImgFrameCapability.hpp b/include/depthai/capabilities/ImgFrameCapability.hpp
index 8a8f560d8..36122f9ac 100644
--- a/include/depthai/capabilities/ImgFrameCapability.hpp
+++ b/include/depthai/capabilities/ImgFrameCapability.hpp
@@ -46,9 +46,10 @@ class ImgFrameCapability : public CapabilityCRTP<Capability, ImgFrameCapability>
     CapabilityRange<float> fps;
     std::optional<ImgFrame::Type> type;
     ImgResizeMode resizeMode{ImgResizeMode::CROP};
+    bool enableUndistortion = true;
     // TODO(jakgra) add optional CapabilityRange fov / max-min horiz. / vertical crop;
 
-    DEPTHAI_SERIALIZE(ImgFrameCapability, size, fps, type, resizeMode);
+    DEPTHAI_SERIALIZE(ImgFrameCapability, size, fps, type, resizeMode, enableUndistortion);
 
    private:
     class Impl;

From f19c0a02386ff220615f957f49406dcd75a59eb1 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Tue, 10 Dec 2024 20:41:42 +0200
Subject: [PATCH 15/68] RVC2: Update FW

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index a0496af48..74feb5165 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "5ea287b8b29e9cdefed2b5038be8ba18019408bf")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "9ce144f0a61f6b83a31bd3716085e1c5438ae0bd")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 54efee8e5bdeafe178cc10107847cdf35b565bb1 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 11 Dec 2024 11:30:43 +0100
Subject: [PATCH 16/68] Bump rvc2 fw

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 83836b1a9..5588c65a0 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "f8c26a69711ffb3765226f7b373c9929ae97e829")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "eb2e8d316d9be5e867ce9b10d982e6e453d78bd1")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 6ed376990d57a2156588a0e8d8b2abf5f763294c Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 11 Dec 2024 11:49:30 +0100
Subject: [PATCH 17/68] Bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 82193e790..5476d8489 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+985054c5ab25128d137f7205e2aa337d422ddffa")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+95a37dca4888e8721aeb46ddaf89c0078c748f03")

From de501944fac4e7c64c10853e0a7310e5c22b4419 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 11 Dec 2024 12:42:23 +0100
Subject: [PATCH 18/68] Re-add depth align to spatial detection network

---
 src/pipeline/node/SpatialDetectionNetwork.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pipeline/node/SpatialDetectionNetwork.cpp b/src/pipeline/node/SpatialDetectionNetwork.cpp
index d2e1c949f..542fbd9f2 100644
--- a/src/pipeline/node/SpatialDetectionNetwork.cpp
+++ b/src/pipeline/node/SpatialDetectionNetwork.cpp
@@ -57,7 +57,7 @@ std::shared_ptr<SpatialDetectionNetwork> SpatialDetectionNetwork::build(const st
     neuralNetwork->build(camera, nnArchive, fps);
     detectionParser->setNNArchive(nnArchive);
     stereo->depth.link(inputDepth);
-    // stereo->setDepthAlign(camera->getBoardSocket());
+    stereo->setDepthAlign(camera->getBoardSocket());
     return std::static_pointer_cast<SpatialDetectionNetwork>(shared_from_this());
 }
 

From b4f0772e5d61ea389dd3c73b6e7ee2a9e57da4a9 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 11 Dec 2024 13:34:02 +0100
Subject: [PATCH 19/68] Clamp remapped rect in SpatialDetectionNetwork

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 5588c65a0..d87d4f706 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "eb2e8d316d9be5e867ce9b10d982e6e453d78bd1")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "645253b14a01fdf9808192714f540e475ff30780")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 9da98f4fcecaadfdea2bfe7a86075ad3c5374379 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Wed, 11 Dec 2024 19:43:08 +0200
Subject: [PATCH 20/68] RVC2: Update FW, change letterboxing behavior

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 74feb5165..2aa6c262f 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "9ce144f0a61f6b83a31bd3716085e1c5438ae0bd")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "05657f1f9b182d7a75471c9b82388c5570cecf6c")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 3fa2ba274e1a27a09d2d2e1b234bd837953282f2 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Thu, 12 Dec 2024 12:10:51 +0100
Subject: [PATCH 21/68] ImgTransformations fixes for aligned depth

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index d87d4f706..6672bf6c2 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "645253b14a01fdf9808192714f540e475ff30780")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "7b539a294865f427bf78c2952a4e921a8fbcbbf5")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 884cc0654bdf9cc4fd225aaa4fd8654270b79fc4 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 13 Dec 2024 09:08:51 +0100
Subject: [PATCH 22/68] Bump rvc2 fw with merge [no ci]

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 6672bf6c2..5fe21bab7 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "7b539a294865f427bf78c2952a4e921a8fbcbbf5")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "23c307c94db6e7a58eabbe100381ec7fbd9879d9")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 23b30117d6c1927eb35ec6a5dd4c8b863c94970c Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 13 Dec 2024 09:14:57 +0100
Subject: [PATCH 23/68] Bump rvc4 fw with merge

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 5476d8489..5d3f541ea 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+95a37dca4888e8721aeb46ddaf89c0078c748f03")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+ead877fbab2087a4ef7c8a7953da65d5690b2f59")

From 8d3db28168942517fc2514f659c12a7f23223a37 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 13 Dec 2024 11:36:19 +0100
Subject: [PATCH 24/68] FW: fix video encoder crash

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 5fe21bab7..4127572e8 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "23c307c94db6e7a58eabbe100381ec7fbd9879d9")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "01251af7e2411b61b825c898cfe201b70343daed")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From dfbccf660417242b28329162069404fb82c2a700 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 13 Dec 2024 14:59:51 +0100
Subject: [PATCH 25/68] FW: fix SpatialDetectionNetwork roi error

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 4127572e8..2a0b02c03 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "01251af7e2411b61b825c898cfe201b70343daed")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "ca1de34f09fc871e63db84fe229be44c276f5117")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 8cec2b8351737a780ae7fdf8c73d7c4bf50c5174 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 16 Dec 2024 12:56:07 +0100
Subject: [PATCH 26/68] FW: Fix transformationdata in aligned stereo depth
 images

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake   |  2 +-
 .../python/StereoDepth/stereo_depth_remap.py  | 26 ++++++++++++-------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 2a0b02c03..b3b27b736 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "ca1de34f09fc871e63db84fe229be44c276f5117")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "989e418f7f5b64d35659085309f208560425257b")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")
diff --git a/examples/python/StereoDepth/stereo_depth_remap.py b/examples/python/StereoDepth/stereo_depth_remap.py
index 4e1f9700a..8d213a086 100644
--- a/examples/python/StereoDepth/stereo_depth_remap.py
+++ b/examples/python/StereoDepth/stereo_depth_remap.py
@@ -19,7 +19,7 @@ def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
 
     # Get the four vertices of the rotated rectangle
     box = cv2.boxPoints(rect)
-    box = np.int0(box)  # Convert to integer coordinates
+    box = np.intp(box)  # Convert to integer coordinates
 
     # Draw the rectangle on the frame
     cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)
@@ -35,12 +35,16 @@ def processDepthFrame(depthFrame):
     return cv2.applyColorMap(depthFrameColor, cv2.COLORMAP_HOT)
 
 with dai.Pipeline() as pipeline:
+    color = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A)
     monoLeft = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
     monoRight = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C)
     stereo = pipeline.create(dai.node.StereoDepth)
 
     stereo.setDefaultProfilePreset(dai.node.StereoDepth.PresetMode.HIGH_DENSITY)
-    stereo.setDepthAlign(dai.CameraBoardSocket.RGB)
+    # stereo.setDepthAlign(dai.CameraBoardSocket.CAM_A)
+    # stereo.setOutputSize(640, 400)
+
+    colorCamOut = color.requestOutput((640, 480))
 
     monoLeftOut = monoLeft.requestOutput((640, 480))
     monoRightOut = monoRight.requestOutput((640, 480))
@@ -48,27 +52,31 @@ def processDepthFrame(depthFrame):
     monoLeftOut.link(stereo.left)
     monoRightOut.link(stereo.right)
 
+    colorOut = colorCamOut.createOutputQueue()
     rightOut = monoRightOut.createOutputQueue()
     stereoOut = stereo.depth.createOutputQueue()
 
     pipeline.start()
     while pipeline.isRunning():
-        rightFrame = rightOut.get()
+        colorFrame = colorOut.get()
         stereoFrame = stereoOut.get()
 
-        assert rightFrame.getTransformation().isValid()
-        assert stereoFrame.getTransformation().isValid()
+        assert colorFrame.validateTransformations()
+        assert stereoFrame.validateTransformations()
 
-        right = rightFrame.getCvFrame()
+        clr = colorFrame.getCvFrame()
         depth = processDepthFrame(stereoFrame.getCvFrame())
 
         rect = dai.RotatedRect(dai.Point2f(300, 200), dai.Size2f(200, 100), 10)
-        remappedRect = rightFrame.getTransformation().remapRectTo(stereoFrame.getTransformation(), rect)
+        remappedRect = colorFrame.getTransformation().remapRectTo(stereoFrame.getTransformation(), rect)
+
+        print(f"Original rect x: {rect.center.x} y: {rect.center.y} width: {rect.size.width} height: {rect.size.height} angle: {rect.angle}")
+        print(f"Remapped rect x: {remappedRect.center.x} y: {remappedRect.center.y} width: {remappedRect.size.width} height: {remappedRect.size.height} angle: {remappedRect.angle}")
 
-        draw_rotated_rectangle(right, (rect.center.x, rect.center.y), (rect.size.width, rect.size.height), rect.angle, (255, 0, 0))
+        draw_rotated_rectangle(clr, (rect.center.x, rect.center.y), (rect.size.width, rect.size.height), rect.angle, (255, 0, 0))
         draw_rotated_rectangle(depth, (remappedRect.center.x, remappedRect.center.y), (remappedRect.size.width, remappedRect.size.height), remappedRect.angle, (255, 0, 0))
 
-        cv2.imshow("right", right)
+        cv2.imshow("color", clr)
         cv2.imshow("depth", depth)
 
         if cv2.waitKey(1) == ord('q'):

From 8f25dfe50725ad9065633a145a4b94be7a37cbcb Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 17 Dec 2024 12:05:00 +0100
Subject: [PATCH 27/68] FW: Add sanity check when copying transformation data

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index b3b27b736..5d24cf820 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "989e418f7f5b64d35659085309f208560425257b")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "1927a33b9aef6db14c36002071bc03ca527284d1")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From ed0adc1bae9258c5f90c436b04995c79a7c7efd0 Mon Sep 17 00:00:00 2001
From: Matevz Morato <matevz.morato@gmail.com>
Date: Tue, 17 Dec 2024 18:56:58 +0100
Subject: [PATCH 28/68] Add missing bindings

---
 .../python/src/pipeline/datatype/ImgFrameBindings.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp b/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
index facafa0f1..6752646e8 100644
--- a/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
+++ b/bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
@@ -144,9 +144,20 @@ void bind_imgframe(pybind11::module& m, void* pCallstack) {
         .def("getSourceIntrinsicMatrixInv", &ImgTransformation::getSourceIntrinsicMatrixInv)
         .def("getIntrinsicMatrix", &ImgTransformation::getIntrinsicMatrix)
         .def("getIntrinsicMatrixInv", &ImgTransformation::getIntrinsicMatrixInv)
+        .def("getDistortionModel", &ImgTransformation::getDistortionModel, DOC(dai, ImgTransformation, getDistortionModel))
+        .def("getDistortionCoefficients", &ImgTransformation::getDistortionCoefficients, DOC(dai, ImgTransformation, getDistortionCoefficients))
+        .def("getSrcCrops", &ImgTransformation::getSrcCrops, DOC(dai, ImgTransformation, getSrcCrops))
+        .def("getSrcMaskPt", &ImgTransformation::getSrcMaskPt, py::arg("x"), py::arg("y"), DOC(dai, ImgTransformation, getSrcMaskPt))
+        .def("getDstMaskPt", &ImgTransformation::getDstMaskPt, py::arg("x"), py::arg("y"), DOC(dai, ImgTransformation, getDstMaskPt))
         .def("getDFov", &ImgTransformation::getDFov, py::arg("source") = false)
         .def("getHFov", &ImgTransformation::getHFov, py::arg("source") = false)
         .def("getVFov", &ImgTransformation::getVFov, py::arg("source") = false)
+        .def("setIntrinsicMatrix", &ImgTransformation::setIntrinsicMatrix, py::arg("intrinsicMatrix"), DOC(dai, ImgTransformation, setIntrinsicMatrix))
+        .def("setDistortionModel", &ImgTransformation::setDistortionModel, py::arg("model"), DOC(dai, ImgTransformation, setDistortionModel))
+        .def("setDistortionCoefficients",
+             &ImgTransformation::setDistortionCoefficients,
+             py::arg("coefficients"),
+             DOC(dai, ImgTransformation, setDistortionCoefficients))
         .def("addTransformation", &ImgTransformation::addTransformation, py::arg("matrix"), DOC(dai, ImgTransformation, addTransformation))
         .def("addCrop", &ImgTransformation::addCrop, py::arg("x"), py::arg("y"), py::arg("width"), py::arg("height"), DOC(dai, ImgTransformation, addCrop))
         .def("addPadding",

From 4ca93ad75aecb80f16c2ccf45a128eef3727e6da Mon Sep 17 00:00:00 2001
From: Matevz Morato <matevz.morato@gmail.com>
Date: Tue, 17 Dec 2024 20:57:18 +0100
Subject: [PATCH 29/68] Update the depth_align.py example and bump RVC2 FW with
 fixed distortion coef

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake |  2 +-
 examples/python/ImageAlign/depth_align.py   | 19 +++----------------
 2 files changed, 4 insertions(+), 17 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 5d24cf820..fd94c04e1 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "1927a33b9aef6db14c36002071bc03ca527284d1")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "9f30ea80870a0d82ac4b045116ed68f44dbf9bcd")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")
diff --git a/examples/python/ImageAlign/depth_align.py b/examples/python/ImageAlign/depth_align.py
index 3ca4eccee..2a461e4b3 100755
--- a/examples/python/ImageAlign/depth_align.py
+++ b/examples/python/ImageAlign/depth_align.py
@@ -25,15 +25,7 @@ def getFps(self):
             return 0
         return (len(self.frameTimes) - 1) / (self.frameTimes[-1] - self.frameTimes[0])
 
-device = dai.Device()
-
-calibrationHandler = device.readCalibration()
-rgbDistortion = calibrationHandler.getDistortionCoefficients(RGB_SOCKET)
-distortionModel = calibrationHandler.getDistortionModel(RGB_SOCKET)
-if distortionModel != dai.CameraModel.Perspective:
-    raise RuntimeError("Unsupported distortion model for RGB camera. This example supports only Perspective model.")
-
-pipeline = dai.Pipeline(device)
+pipeline = dai.Pipeline()
 
 platform = pipeline.getDefaultDevice().getPlatform()
 
@@ -47,7 +39,6 @@ def getFps(self):
     align = pipeline.create(dai.node.ImageAlign)
 
 stereo.setExtendedDisparity(True)
-
 sync.setSyncThreshold(timedelta(seconds=1/(2*FPS)))
 
 rgbOut = camRgb.requestOutput(size = (1280, 960), fps = FPS)
@@ -142,14 +133,10 @@ def updateBlendWeights(percentRgb):
         # Blend when both received
         if frameDepth is not None:
             cvFrame = frameRgb.getCvFrame()
-
-            # Undistort the rgb frame
-            rgbIntrinsics = calibrationHandler.getCameraIntrinsics(RGB_SOCKET, int(cvFrame.shape[1]), int(cvFrame.shape[0]))
-
             cvFrameUndistorted = cv2.undistort(
                 cvFrame,
-                np.array(rgbIntrinsics),
-                np.array(rgbDistortion),
+                np.array(frameRgb.getTransformation().getIntrinsicMatrix()),
+                np.array(frameRgb.getTransformation().getDistortionCoefficients()),
             )
             # Colorize the aligned depth
             alignedDepthColorized = colorizeDepth(frameDepth.getFrame())

From 461c9e82c54d226855e2a2ed03b149ff915ee7d5 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 18 Dec 2024 11:00:22 +0100
Subject: [PATCH 30/68] Fix ImageManipV2 crash

---
 include/depthai/utility/ImageManipV2Impl.hpp | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/include/depthai/utility/ImageManipV2Impl.hpp b/include/depthai/utility/ImageManipV2Impl.hpp
index f145a76cb..c7e7cf3b5 100644
--- a/include/depthai/utility/ImageManipV2Impl.hpp
+++ b/include/depthai/utility/ImageManipV2Impl.hpp
@@ -2811,15 +2811,12 @@ void Warp<ImageManipBuffer, ImageManipData>::build(const FrameSpecs srcFrameSpec
     sourceMaxY = inHeight;
     for(const auto& corners : srcCorners) {
         auto [minx, maxx, miny, maxy] = getOuterRect(std::vector<std::array<float, 2>>(corners.begin(), corners.end()));
-        minx = std::max(minx, 0.0f);
-        maxx = std::min(maxx, (float)inWidth);
-        miny = std::max(miny, 0.0f);
-        maxy = std::min(maxy, (float)inHeight);
         sourceMinX = std::max(sourceMinX, (size_t)std::floor(minx));
         sourceMinY = std::max(sourceMinY, (size_t)std::floor(miny));
         sourceMaxX = std::min(sourceMaxX, (size_t)std::ceil(maxx));
         sourceMaxY = std::min(sourceMaxY, (size_t)std::ceil(maxy));
     }
+    if(sourceMinX >= sourceMaxX || sourceMinY >= sourceMaxY) throw std::runtime_error("Initial crop is outside the source image");
 
 #if !DEPTHAI_IMAGEMANIPV2_OPENCV && !DEPTHAI_IMAGEMANIPV2_FASTCV || !defined(DEPTHAI_HAVE_OPENCV_SUPPORT) && !defined(DEPTHAI_HAVE_FASTCV_SUPPORT)
     const uint32_t outWidth = dstFrameSpecs.width;

From 824bbae11e500b072db0fd82f866588b9e6e6e59 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 18 Dec 2024 11:01:27 +0100
Subject: [PATCH 31/68] Bump rvc2 fw

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index fd94c04e1..0d92ba775 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "9f30ea80870a0d82ac4b045116ed68f44dbf9bcd")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "a37bb5a86ba590c4d860edf8fd3896aa0d737ef0")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 741a6a875d3e8e981d5c61d23e9df0dfa76a2c0b Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 18 Dec 2024 11:32:22 +0100
Subject: [PATCH 32/68] Bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 5d3f541ea..dbabfeda8 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+ead877fbab2087a4ef7c8a7953da65d5690b2f59")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+45db9c5c784e18e71e22314685d0fbae76bbfbf4")

From 80793f6e7a96ee8d77982a887dea0d8d4a0f5e7a Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 24 Dec 2024 12:05:33 +0100
Subject: [PATCH 33/68] FW: hopefully fix videnc crash

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 0d92ba775..e986938f8 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "a37bb5a86ba590c4d860edf8fd3896aa0d737ef0")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "0badbf0506cf5b452fc7b449da6953107661f2d5")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 26ba7b94e67b9062e0fb46170cf91a744edcfae9 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 24 Dec 2024 12:33:41 +0100
Subject: [PATCH 34/68] FW: new attempt at fixing videnc crash on RVC2

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index e986938f8..5b8052d03 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "0badbf0506cf5b452fc7b449da6953107661f2d5")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "fd872d7b445d70304d585652dadb8d25f5ec52d6")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 9ec8927b35504f4f01dda702326b02b86c3c15ec Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 11:31:33 +0100
Subject: [PATCH 35/68] Fix encoded_frame_tests [no ci]

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 5b8052d03..537abfc8a 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "fd872d7b445d70304d585652dadb8d25f5ec52d6")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "51bc2defa0658f5187228cdb6801134bbc37ea04")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 223ef9773119aa358d32d2a800e32db21276cc83 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 11:33:58 +0100
Subject: [PATCH 36/68] Bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index dbabfeda8..8a7ff23de 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+45db9c5c784e18e71e22314685d0fbae76bbfbf4")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+84f9b820521592916f256ac26eb3ff79b5e7f6af")

From 06b74c2a2bfeed8b7bf3a683336456cd0f517e7e Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 12:30:22 +0100
Subject: [PATCH 37/68] FW: Add missing header

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 537abfc8a..276c6706e 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "51bc2defa0658f5187228cdb6801134bbc37ea04")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "cd3ddb9d67f8e2a5007de6bf27818ec7c5916e24")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 3a6a3b67d36faf4de0ea93f085f8cce407a44005 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 14:07:27 +0100
Subject: [PATCH 38/68] FW: Fix imagemanipv2 issue on RVC2

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 276c6706e..37eeee883 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "cd3ddb9d67f8e2a5007de6bf27818ec7c5916e24")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "435d0b10d52cb3e78b30f64b9a6e2e28da28cc76")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 025e92522982c4e25eeb3ccfebf57885ddab205a Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 14:47:54 +0100
Subject: [PATCH 39/68] Fix imagemanipv2 issue

---
 include/depthai/utility/ImageManipV2Impl.hpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/depthai/utility/ImageManipV2Impl.hpp b/include/depthai/utility/ImageManipV2Impl.hpp
index c7e7cf3b5..70d882819 100644
--- a/include/depthai/utility/ImageManipV2Impl.hpp
+++ b/include/depthai/utility/ImageManipV2Impl.hpp
@@ -2811,8 +2811,8 @@ void Warp<ImageManipBuffer, ImageManipData>::build(const FrameSpecs srcFrameSpec
     sourceMaxY = inHeight;
     for(const auto& corners : srcCorners) {
         auto [minx, maxx, miny, maxy] = getOuterRect(std::vector<std::array<float, 2>>(corners.begin(), corners.end()));
-        sourceMinX = std::max(sourceMinX, (size_t)std::floor(minx));
-        sourceMinY = std::max(sourceMinY, (size_t)std::floor(miny));
+        sourceMinX = std::max(sourceMinX, (size_t)std::floor(std::max(minx, 0.f)));
+        sourceMinY = std::max(sourceMinY, (size_t)std::floor(std::max(miny, 0.f));
         sourceMaxX = std::min(sourceMaxX, (size_t)std::ceil(maxx));
         sourceMaxY = std::min(sourceMaxY, (size_t)std::ceil(maxy));
     }

From 04c1f6582cd641b7e7975304c8c6c9653d0b2261 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 14:55:59 +0100
Subject: [PATCH 40/68] Fix build issue [no ci]

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake  | 2 +-
 include/depthai/utility/ImageManipV2Impl.hpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 8a7ff23de..832a7e34f 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+84f9b820521592916f256ac26eb3ff79b5e7f6af")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+0b0d86ec3ccb46a5830460fd73b8e8379dd6fd47")
diff --git a/include/depthai/utility/ImageManipV2Impl.hpp b/include/depthai/utility/ImageManipV2Impl.hpp
index 70d882819..372b604b4 100644
--- a/include/depthai/utility/ImageManipV2Impl.hpp
+++ b/include/depthai/utility/ImageManipV2Impl.hpp
@@ -2812,7 +2812,7 @@ void Warp<ImageManipBuffer, ImageManipData>::build(const FrameSpecs srcFrameSpec
     for(const auto& corners : srcCorners) {
         auto [minx, maxx, miny, maxy] = getOuterRect(std::vector<std::array<float, 2>>(corners.begin(), corners.end()));
         sourceMinX = std::max(sourceMinX, (size_t)std::floor(std::max(minx, 0.f)));
-        sourceMinY = std::max(sourceMinY, (size_t)std::floor(std::max(miny, 0.f));
+        sourceMinY = std::max(sourceMinY, (size_t)std::floor(std::max(miny, 0.f)));
         sourceMaxX = std::min(sourceMaxX, (size_t)std::ceil(maxx));
         sourceMaxY = std::min(sourceMaxY, (size_t)std::ceil(maxy));
     }

From 17125f9d60314770e9b12df0eb18270cbac7b42e Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 6 Jan 2025 15:14:20 +0100
Subject: [PATCH 41/68] Bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 832a7e34f..487ddb2ed 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+0b0d86ec3ccb46a5830460fd73b8e8379dd6fd47")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+38fbf795d3d5335f409db0247c9cfbada0e66c49")

From 49e401b0c521e32d4d445a2370d74df608f8c10e Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Tue, 7 Jan 2025 13:06:31 +0100
Subject: [PATCH 42/68] Add test

---
 examples/python/CMakeLists.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt
index 7ac0f52e6..e31a0c93a 100644
--- a/examples/python/CMakeLists.txt
+++ b/examples/python/CMakeLists.txt
@@ -147,6 +147,8 @@ dai_set_example_test_labels(april_tags_replay ondevice rvc2_all rvc4 ci)
 ## Detection network
 add_python_example(detection_network DetectionNetwork/detection_network.py)
 dai_set_example_test_labels(detection_network ondevice rvc2_all rvc4 ci)
+add_python_example(detection_network_remap DetectionNetwork/detection_network_remap.py)
+dai_set_example_test_labels(detection_network ondevice rvc2_all rvc4 ci)
 
 ## Host nodes
 add_python_example(display HostNodes/display.py)

From 46f478f2867dc7784b69631d7450603a7d1d4255 Mon Sep 17 00:00:00 2001
From: Matevz Morato <matevz.morato@gmail.com>
Date: Tue, 7 Jan 2025 15:36:50 +0100
Subject: [PATCH 43/68] Colorize frame more generically

---
 .../detection_network_remap.py                | 30 +++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/examples/python/DetectionNetwork/detection_network_remap.py b/examples/python/DetectionNetwork/detection_network_remap.py
index d872fb737..f533475ec 100644
--- a/examples/python/DetectionNetwork/detection_network_remap.py
+++ b/examples/python/DetectionNetwork/detection_network_remap.py
@@ -4,6 +4,33 @@
 import depthai as dai
 import numpy as np
 
+def colorizeDepth(frameDepth):
+    invalidMask = frameDepth == 0
+    # Log the depth, minDepth and maxDepth
+    try:
+        minDepth = np.percentile(frameDepth[frameDepth != 0], 3)
+        maxDepth = np.percentile(frameDepth[frameDepth != 0], 95)
+        logDepth = np.log(frameDepth, where=frameDepth != 0)
+        logMinDepth = np.log(minDepth)
+        logMaxDepth = np.log(maxDepth)
+        np.nan_to_num(logDepth, copy=False, nan=logMinDepth)
+        # Clip the values to be in the 0-255 range
+        logDepth = np.clip(logDepth, logMinDepth, logMaxDepth)
+
+        # Interpolate only valid logDepth values, setting the rest based on the mask
+        depthFrameColor = np.interp(logDepth, (logMinDepth, logMaxDepth), (0, 255))
+        depthFrameColor = np.nan_to_num(depthFrameColor)
+        depthFrameColor = depthFrameColor.astype(np.uint8)
+        depthFrameColor = cv2.applyColorMap(depthFrameColor, cv2.COLORMAP_JET)
+        # Set invalid depth pixels to black
+        depthFrameColor[invalidMask] = 0
+    except IndexError:
+        # Frame is likely empty
+        depthFrameColor = np.zeros((frameDepth.shape[0], frameDepth.shape[1], 3), dtype=np.uint8)
+    except Exception as e:
+        raise e
+    return depthFrameColor
+
 # Create pipeline
 with dai.Pipeline() as pipeline:
     cameraNode = pipeline.create(dai.node.Camera).build()
@@ -35,8 +62,7 @@ def displayFrame(name: str, frame: dai.ImgFrame, imgDetections: dai.ImgDetection
         assert imgDetections.getTransformation() is not None
         cvFrame = frame.getFrame() if frame.getType() == dai.ImgFrame.Type.RAW16 else frame.getCvFrame()
         if(frame.getType() == dai.ImgFrame.Type.RAW16):
-            cvFrame = (cvFrame * (255 / stereo.initialConfig.getMaxDisparity())).astype(np.uint8)
-            cvFrame = cv2.applyColorMap(cvFrame, cv2.COLORMAP_JET)
+            cvFrame = colorizeDepth(cvFrame)
         for detection in imgDetections.detections:
             # Get the shape of the frame from which the detections originated for denormalization
             normShape = imgDetections.getTransformation().getSize()

From 7278810ac0a2c73efa9cd8d6e031c98c5cc37776 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Tue, 7 Jan 2025 17:28:30 +0200
Subject: [PATCH 44/68] Update FW: Merge with latest v3_develop

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index a0496af48..2a0813719 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "5ea287b8b29e9cdefed2b5038be8ba18019408bf")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "a82fba9868fd4af0ef41fce646b56bde88bcb247")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 9c8a87da4f84633083ab1337e960222b35f9b76f Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Wed, 8 Jan 2025 11:40:29 +0100
Subject: [PATCH 45/68] Bump rvc2 fw

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 37eeee883..a0f907a1b 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "435d0b10d52cb3e78b30f64b9a6e2e28da28cc76")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "9626f5a66abd91139233a6fef38a073bfe981120")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 633467807850201bb3e2078ffe74debef4f2aaab Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Wed, 8 Jan 2025 13:42:41 +0200
Subject: [PATCH 46/68] Update RVC4 FW

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index db0536b8d..8d35bdc58 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+6fc71e8674fe7a520b93f4370cb157805f0bc0f2")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+6a56462c5dd276487cdd046ecc62d67160257daf")

From 0ebfe9a30d8119d6fa5dfcb52fe2ae2de77d0c69 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Thu, 9 Jan 2025 12:14:19 +0100
Subject: [PATCH 47/68] Add example for transformationdata [no ci]

---
 examples/python/CMakeLists.txt                |  3 +
 examples/python/ImageAlign/aligned_remap.py   | 65 -----------------
 .../python/ImageManip/image_manip_v2_remap.py | 69 +++++++++++++++++++
 3 files changed, 72 insertions(+), 65 deletions(-)
 delete mode 100644 examples/python/ImageAlign/aligned_remap.py
 create mode 100644 examples/python/ImageManip/image_manip_v2_remap.py

diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt
index e31a0c93a..f6969f8f5 100644
--- a/examples/python/CMakeLists.txt
+++ b/examples/python/CMakeLists.txt
@@ -164,6 +164,9 @@ dai_set_example_test_labels(image_manip_mod ondevice rvc2_all rvc4 ci)
 add_python_example(image_manip_resize ImageManip/image_manip_v2_resize.py)
 dai_set_example_test_labels(image_manip_resize ondevice rvc2_all rvc4 ci)
 
+add_python_example(image_manip_remap ImageManip/image_manip_v2_remap.py)
+dai_set_example_test_labels(image_manip_remap ondevice rvc2_all rvc4 ci)
+
 ## Misc
 add_python_example(reconnect_callback Misc/AutoReconnect/reconnect_callback.py)
 dai_set_example_test_labels(reconnect_callback ondevice rvc2_all rvc4 ci)
diff --git a/examples/python/ImageAlign/aligned_remap.py b/examples/python/ImageAlign/aligned_remap.py
deleted file mode 100644
index af76e5c09..000000000
--- a/examples/python/ImageAlign/aligned_remap.py
+++ /dev/null
@@ -1,65 +0,0 @@
-import numpy as np
-import depthai as dai
-import cv2
-
-def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
-    """
-    Draws a rotated rectangle on the given frame.
-
-    Args:
-        frame (numpy.ndarray): The image/frame to draw on.
-        center (tuple): The (x, y) coordinates of the rectangle's center.
-        size (tuple): The (width, height) of the rectangle.
-        angle (float): The rotation angle of the rectangle in degrees (counter-clockwise).
-        color (tuple): The color of the rectangle in BGR format (e.g., (0, 255, 0) for green).
-        thickness (int): The thickness of the rectangle edges. Default is 2.
-    """
-    # Create a rotated rectangle
-    rect = ((center[0], center[1]), (size[0], size[1]), angle)
-
-    # Get the four vertices of the rotated rectangle
-    box = cv2.boxPoints(rect)
-    box = np.int0(box)  # Convert to integer coordinates
-
-    # Draw the rectangle on the frame
-    cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)
-
-with dai.Pipeline() as pipeline:
-    monoLeft = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
-    monoRight = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C)
-    align = pipeline.create(dai.node.ImageAlign)
-
-    monoLeftOut = monoLeft.requestOutput((640, 480))
-    monoRightOut = monoRight.requestOutput((640, 480))
-
-    monoLeftOut.link(align.input)
-    monoRightOut.link(align.inputAlignTo)
-
-    rightOut = monoRightOut.createOutputQueue()
-    alignOut = align.outputAligned.createOutputQueue()
-
-    pipeline.start()
-    while pipeline.isRunning():
-        rightFrame = rightOut.get()
-        alignedFrame = alignOut.get()
-
-        print(alignedFrame)
-
-        assert rightFrame.validateTransformations()
-        assert alignedFrame.validateTransformations()
-
-        right = rightFrame.getCvFrame()
-        depth = alignedFrame.getCvFrame()
-
-        rect = dai.RotatedRect(dai.Point2f(200, 100), dai.Size2f(200, 100), 10)
-        remappedRect = rightFrame.getTransformation().remapRectTo(alignedFrame.getTransformation(), rect)
-
-        draw_rotated_rectangle(right, (rect.center.x, rect.center.y), (rect.size.width, rect.size.height), rect.angle, (255, 0, 0))
-        draw_rotated_rectangle(depth, (remappedRect.center.x, remappedRect.center.y), (remappedRect.size.width, remappedRect.size.height), remappedRect.angle, (255, 0, 0))
-
-        cv2.imshow("right", right)
-        cv2.imshow("aligned", depth)
-
-        if cv2.waitKey(1) == ord('q'):
-            break
-    pipeline.stop()
diff --git a/examples/python/ImageManip/image_manip_v2_remap.py b/examples/python/ImageManip/image_manip_v2_remap.py
new file mode 100644
index 000000000..1da9e6322
--- /dev/null
+++ b/examples/python/ImageManip/image_manip_v2_remap.py
@@ -0,0 +1,69 @@
+import depthai as dai
+import cv2
+import numpy as np
+
+def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
+    """
+    Draws a rotated rectangle on the given frame.
+
+    Args:
+        frame (numpy.ndarray): The image/frame to draw on.
+        center (tuple): The (x, y) coordinates of the rectangle's center.
+        size (tuple): The (width, height) of the rectangle.
+        angle (float): The rotation angle of the rectangle in degrees (counter-clockwise).
+        color (tuple): The color of the rectangle in BGR format (e.g., (0, 255, 0) for green).
+        thickness (int): The thickness of the rectangle edges. Default is 2.
+    """
+    # Create a rotated rectangle
+    rect = ((center[0], center[1]), (size[0], size[1]), angle)
+
+    # Get the four vertices of the rotated rectangle
+    box = cv2.boxPoints(rect)
+    box = np.int0(box)  # Convert to integer coordinates
+
+    # Draw the rectangle on the frame
+    cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)
+
+with dai.Pipeline() as pipeline:
+    cam = pipeline.create(dai.node.Camera).build()
+    camOut = cam.requestOutput((640, 400), dai.ImgFrame.Type.BGR888i, fps = 30.0)
+    manip1 = pipeline.create(dai.node.ImageManipV2)
+    manip2 = pipeline.create(dai.node.ImageManipV2)
+
+    camOut.link(manip1.inputImage)
+    manip1.out.link(manip2.inputImage)
+
+    manip1.initialConfig.addRotateDeg(90)
+    manip1.initialConfig.setOutputSize(200, 320)
+
+    manip2.initialConfig.addRotateDeg(90)
+    manip2.initialConfig.setOutputSize(320, 200)
+
+    outQcam = camOut.createOutputQueue()
+    outQ1 = manip1.out.createOutputQueue()
+    outQ2 = manip2.out.createOutputQueue()
+
+    pipeline.start()
+
+    while True:
+        camFrame: dai.ImgFrame = outQcam.get()
+        manip1Frame: dai.ImgFrame = outQ1.get()
+        manip2Frame: dai.ImgFrame = outQ2.get()
+
+        camCv = camFrame.getCvFrame()
+        manip1Cv = manip1Frame.getCvFrame()
+        manip2Cv = manip2Frame.getCvFrame()
+
+        rect2 = dai.RotatedRect(dai.Rect(dai.Point2f(100, 100), dai.Point2f(200, 150)), 0)
+        rect1 = manip2Frame.getTransformation().remapRectTo(manip1Frame.getTransformation(), rect2)
+        rectcam = manip1Frame.getTransformation().remapRectTo(camFrame.getTransformation(), rect1)
+
+        draw_rotated_rectangle(manip2Cv, (rect2.center.x, rect2.center.y), (rect2.size.width, rect2.size.height), rect2.angle, (255, 0, 0))
+        draw_rotated_rectangle(manip1Cv, (rect1.center.x, rect1.center.y), (rect1.size.width, rect1.size.height), rect1.angle, (255, 0, 0))
+        draw_rotated_rectangle(camCv, (rectcam.center.x, rectcam.center.y), (rectcam.size.width, rectcam.size.height), rectcam.angle, (255, 0, 0))
+
+        cv2.imshow("cam", camCv)
+        cv2.imshow("manip1", manip1Cv)
+        cv2.imshow("manip2", manip2Cv)
+        if cv2.waitKey(1) == ord('q'):
+            break

From fe7061aea35a44500876569f84d9a94195631e65 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Thu, 9 Jan 2025 12:19:26 +0100
Subject: [PATCH 48/68] FW: PR fixes

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index a0f907a1b..feb377c05 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "9626f5a66abd91139233a6fef38a073bfe981120")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "0019499dc72f4583f525da41e7e81b9a0ef4a629")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 289b513a9caa5683822b133a41e6de935c1f3ddd Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Thu, 9 Jan 2025 15:11:00 +0100
Subject: [PATCH 49/68] Bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 487ddb2ed..f0d70755c 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+38fbf795d3d5335f409db0247c9cfbada0e66c49")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+3ee5f7846e645a8b62d9fa17757550702b7628dd")

From 8db82bbf4fd5f889af7767769d62517e3512f7b2 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 10 Jan 2025 11:50:21 +0100
Subject: [PATCH 50/68] FW: handle missing calib when setting initial
 transformation

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index feb377c05..0dd35157d 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "0019499dc72f4583f525da41e7e81b9a0ef4a629")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "9ee0a08d006cdab6191aa9f7e98b494880e24896")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 5cc19b1f8a429edf4c586da2547f9ea90ccb7843 Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 10 Jan 2025 12:21:06 +0100
Subject: [PATCH 51/68] Fix example

---
 examples/python/ImageManip/image_manip_v2_remap.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/examples/python/ImageManip/image_manip_v2_remap.py b/examples/python/ImageManip/image_manip_v2_remap.py
index 1da9e6322..d0a48bf5d 100644
--- a/examples/python/ImageManip/image_manip_v2_remap.py
+++ b/examples/python/ImageManip/image_manip_v2_remap.py
@@ -19,7 +19,7 @@ def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
 
     # Get the four vertices of the rotated rectangle
     box = cv2.boxPoints(rect)
-    box = np.int0(box)  # Convert to integer coordinates
+    box = np.intp(box)  # Convert to integer coordinates
 
     # Draw the rectangle on the frame
     cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)

From 6fc514b1811964e8db26b3eff44108b1fbd6e82c Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Fri, 10 Jan 2025 13:56:39 +0100
Subject: [PATCH 52/68] FW: fix crash when using Cono/ColorCamera

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 0dd35157d..fed491ec8 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "9ee0a08d006cdab6191aa9f7e98b494880e24896")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "3c7d7c93a4c4c55d235ff7e406ed8824b9c18fef")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 074361b92936c5334809db4df08fb9718738b6b4 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 00:29:25 +0200
Subject: [PATCH 53/68] ImageManipV2: Add undistort OP

---
 .../pipeline/datatype/ImageManipConfigV2.hpp  | 28 ++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
index 5f79a1a99..e89b653ce 100644
--- a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
+++ b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
@@ -191,8 +191,28 @@ struct Crop : OpBase {
     DEPTHAI_SERIALIZE(Crop, width, height, normalized, center);
 };
 
+struct Undistort : OpBase {
+    float enable;
+
+    Undistort() {}
+    Undistort(float enable) : enable(enable) {}
+
+    Undistort clone() const {
+        return *this;
+    }
+
+    std::string toStr() const override {
+        std::stringstream ss;
+        ss.imbue(std::locale(""));
+        ss << "U:e=" << enable;
+        return ss.str();
+    }
+
+    DEPTHAI_SERIALIZE(Undistort, enable);
+};
+
 struct ManipOp {
-    std::variant<Translate, Rotate, Resize, Flip, Affine, Perspective, FourPoints, Crop> op;
+    std::variant<Translate, Rotate, Resize, Flip, Affine, Perspective, FourPoints, Crop, Undistort> op;
 
     ManipOp() = default;
     ManipOp(Translate op) : op(op) {}    // NOLINT
@@ -203,6 +223,7 @@ struct ManipOp {
     ManipOp(Perspective op) : op(op) {}  // NOLINT
     ManipOp(FourPoints op) : op(op) {}   // NOLINT
     ManipOp(Crop op) : op(op) {}         // NOLINT
+    ManipOp(Undistort op) : op(op) {}    // NOLINT
 
     DEPTHAI_SERIALIZE(ManipOp, op);
 };
@@ -286,6 +307,11 @@ class ImageManipOpsBase : public ImageManipOpsEnums {
         return *this;
     }
 
+    ImageManipOpsBase& undistort(bool enable) {
+        operations.emplace_back(Undistort(enable));
+        return *this;
+    }
+
     ImageManipOpsBase& crop(float x, float y, float w, float h, bool normalized = false, bool center = false) {
         operations.emplace_back(Translate(-x, -y, normalized));
         operations.emplace_back(Crop(w, h, normalized, center));

From 4bc07f9ae798cba17695a645ece25e0c3f43440c Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 00:50:56 +0200
Subject: [PATCH 54/68] RVC2: Update FW

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 77bbf9672..c624432b7 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "052ee5648d9d5a49e6367c4a81d14a9b9ae8bfcf")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "9c041518bac1e2ac1935a526bd79bb0b7afb28ba")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 39bcc5031b3310ec82843edd8091f5c6be17e40b Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 00:59:28 +0200
Subject: [PATCH 55/68] Move enable undistortion to std::optional

---
 bindings/python/src/pipeline/node/CameraBindings.cpp | 1 +
 include/depthai/capabilities/ImgFrameCapability.hpp  | 2 +-
 include/depthai/pipeline/node/Camera.hpp             | 3 ++-
 src/pipeline/node/Camera.cpp                         | 3 ++-
 4 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/bindings/python/src/pipeline/node/CameraBindings.cpp b/bindings/python/src/pipeline/node/CameraBindings.cpp
index 08fada6b7..6ce05db8f 100644
--- a/bindings/python/src/pipeline/node/CameraBindings.cpp
+++ b/bindings/python/src/pipeline/node/CameraBindings.cpp
@@ -32,6 +32,7 @@ void bind_camera(pybind11::module& m, void* pCallstack) {
              "type"_a = std::nullopt,
              "resizeMode"_a = dai::ImgResizeMode::CROP,
              "fps"_a = 30,
+             "enableUndistortion"_a = std::nullopt,
              py::return_value_policy::reference_internal,
              DOC(dai, node, Camera, requestOutput))
         .def("requestOutput",
diff --git a/include/depthai/capabilities/ImgFrameCapability.hpp b/include/depthai/capabilities/ImgFrameCapability.hpp
index 36122f9ac..9782496e4 100644
--- a/include/depthai/capabilities/ImgFrameCapability.hpp
+++ b/include/depthai/capabilities/ImgFrameCapability.hpp
@@ -46,7 +46,7 @@ class ImgFrameCapability : public CapabilityCRTP<Capability, ImgFrameCapability>
     CapabilityRange<float> fps;
     std::optional<ImgFrame::Type> type;
     ImgResizeMode resizeMode{ImgResizeMode::CROP};
-    bool enableUndistortion = true;
+    std::optional<bool> enableUndistortion;
     // TODO(jakgra) add optional CapabilityRange fov / max-min horiz. / vertical crop;
 
     DEPTHAI_SERIALIZE(ImgFrameCapability, size, fps, type, resizeMode, enableUndistortion);
diff --git a/include/depthai/pipeline/node/Camera.hpp b/include/depthai/pipeline/node/Camera.hpp
index ba81774c0..ff697b6a5 100644
--- a/include/depthai/pipeline/node/Camera.hpp
+++ b/include/depthai/pipeline/node/Camera.hpp
@@ -23,7 +23,8 @@ class Camera : public DeviceNodeCRTP<DeviceNode, Camera, CameraProperties>, publ
     Node::Output* requestOutput(std::pair<uint32_t, uint32_t> size,
                                 std::optional<ImgFrame::Type> type = std::nullopt,
                                 ImgResizeMode resizeMode = ImgResizeMode::CROP,
-                                float fps = 30);
+                                float fps = 30,
+                                std::optional<bool> enableUndistortion = std::nullopt);
     /**
      * Request output with advanced controls. Mainly to be used by custom node writers.
      */
diff --git a/src/pipeline/node/Camera.cpp b/src/pipeline/node/Camera.cpp
index 6dfc30e9b..2e5db4cfc 100644
--- a/src/pipeline/node/Camera.cpp
+++ b/src/pipeline/node/Camera.cpp
@@ -148,12 +148,13 @@ Node::Output* Camera::requestFullResolutionOutput(ImgFrame::Type type, float fps
     return pimpl->requestOutput(*this, cap, false);
 }
 
-Node::Output* Camera::requestOutput(std::pair<uint32_t, uint32_t> size, std::optional<ImgFrame::Type> type, ImgResizeMode resizeMode, float fps) {
+Node::Output* Camera::requestOutput(std::pair<uint32_t, uint32_t> size, std::optional<ImgFrame::Type> type, ImgResizeMode resizeMode, float fps, std::optional<bool> enableUndistortion) {
     ImgFrameCapability cap;
     cap.size.fixed(size);
     cap.fps.fixed(fps);
     cap.type = type;
     cap.resizeMode = resizeMode;
+    cap.enableUndistortion = enableUndistortion;
     return pimpl->requestOutput(*this, cap, false);
 }
 

From 5e46fdda586f2986b3073ce83751dc53c497d13b Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 01:02:30 +0200
Subject: [PATCH 56/68] Update RVC2 FW

---
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index c624432b7..9a7f4a6d7 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "9c041518bac1e2ac1935a526bd79bb0b7afb28ba")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "8eb8e1961097df2223fc280134fe6dbcad41b8b1")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 213b2b441d1b219facd6944dad7e3d05b25850da Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 01:12:32 +0200
Subject: [PATCH 57/68] Update requestOutput bindings

---
 bindings/python/src/pipeline/node/CameraBindings.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bindings/python/src/pipeline/node/CameraBindings.cpp b/bindings/python/src/pipeline/node/CameraBindings.cpp
index 6ce05db8f..d0d6554eb 100644
--- a/bindings/python/src/pipeline/node/CameraBindings.cpp
+++ b/bindings/python/src/pipeline/node/CameraBindings.cpp
@@ -27,7 +27,7 @@ void bind_camera(pybind11::module& m, void* pCallstack) {
         // .def("setCamera", &Camera::setCamera, "name"_a, DOC(dai, node, Camera, setCamera))
         // .def("getCamera", &Camera::getCamera, DOC(dai, node, Camera, getCamera))
         .def("requestOutput",
-             py::overload_cast<std::pair<uint32_t, uint32_t>, std::optional<ImgFrame::Type>, ImgResizeMode, float>(&Camera::requestOutput),
+             py::overload_cast<std::pair<uint32_t, uint32_t>, std::optional<ImgFrame::Type>, ImgResizeMode, float, std::optional<bool>>(&Camera::requestOutput),
              "size"_a,
              "type"_a = std::nullopt,
              "resizeMode"_a = dai::ImgResizeMode::CROP,

From 06b368aafe67f0fd94d7dd6e79bce928a6342639 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 01:13:59 +0200
Subject: [PATCH 58/68] Update RVC4

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index db0536b8d..245952630 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+6fc71e8674fe7a520b93f4370cb157805f0bc0f2")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+20511ecf4c493889543f5ce0bba377314930ac8a")

From d935383ea5416f6e174592796ede037f8b40283a Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 13 Jan 2025 01:38:46 +0200
Subject: [PATCH 59/68] RVC2: Add Camera undistortion example

---
 .../python/RVC2/Camera/camera_undistortion.py | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)
 create mode 100755 examples/python/RVC2/Camera/camera_undistortion.py

diff --git a/examples/python/RVC2/Camera/camera_undistortion.py b/examples/python/RVC2/Camera/camera_undistortion.py
new file mode 100755
index 000000000..a58a48a4e
--- /dev/null
+++ b/examples/python/RVC2/Camera/camera_undistortion.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+
+import cv2
+import depthai as dai
+
+# Create pipeline
+with dai.Pipeline() as pipeline:
+    # Define source and output
+    cam = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B)
+    croppedQueue = cam.requestOutput((300,300), resizeMode=dai.ImgResizeMode.CROP, enableUndistortion=True).createOutputQueue()
+    stretchedQueue = cam.requestOutput((300,300), resizeMode=dai.ImgResizeMode.STRETCH, enableUndistortion=True).createOutputQueue()
+    letterBoxedQueue = cam.requestOutput((300,300), resizeMode=dai.ImgResizeMode.LETTERBOX, enableUndistortion=True).createOutputQueue()
+
+    # Connect to device and start pipeline
+    pipeline.start()
+    while pipeline.isRunning():
+        croppedIn = croppedQueue.get()
+        assert isinstance(croppedIn, dai.ImgFrame)
+        cv2.imshow("cropped undistorted", croppedIn.getCvFrame())
+
+        stretchedIn = stretchedQueue.get()
+        assert isinstance(stretchedIn, dai.ImgFrame)
+        cv2.imshow("stretched undistorted", stretchedIn.getCvFrame())
+
+        letterBoxedIn = letterBoxedQueue.get()
+        assert isinstance(letterBoxedIn, dai.ImgFrame)
+        cv2.imshow("letterboxed undistorted", letterBoxedIn.getCvFrame())
+
+        if cv2.waitKey(1) == ord("q"):
+            break

From 5ab530eeb6d7751ea5c4cbdb9268596be91457db Mon Sep 17 00:00:00 2001
From: asahtik <asahtik@gmail.com>
Date: Mon, 13 Jan 2025 10:28:28 +0100
Subject: [PATCH 60/68] Fix example crash on rvc4, bump rvc4 fw

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake        | 2 +-
 examples/python/ImageManip/image_manip_v2_remap.py | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index f0d70755c..b21e7b3a5 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+3ee5f7846e645a8b62d9fa17757550702b7628dd")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+3cf298000129597b70c7f266bb70bc13647a356f")
diff --git a/examples/python/ImageManip/image_manip_v2_remap.py b/examples/python/ImageManip/image_manip_v2_remap.py
index d0a48bf5d..8cc543e2f 100644
--- a/examples/python/ImageManip/image_manip_v2_remap.py
+++ b/examples/python/ImageManip/image_manip_v2_remap.py
@@ -38,6 +38,7 @@ def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
 
     manip2.initialConfig.addRotateDeg(90)
     manip2.initialConfig.setOutputSize(320, 200)
+    manip2.setRunOnHost(True)
 
     outQcam = camOut.createOutputQueue()
     outQ1 = manip1.out.createOutputQueue()

From 877de5ebcb81174325bc6cd75cfc16877035c304 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Wed, 15 Jan 2025 18:54:08 +0200
Subject: [PATCH 61/68] Remove Undistort OP; add undistort flag

---
 .../pipeline/datatype/ImageManipConfigV2.hpp  | 27 +++----------------
 1 file changed, 4 insertions(+), 23 deletions(-)

diff --git a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
index e89b653ce..3367409c4 100644
--- a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
+++ b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
@@ -191,28 +191,8 @@ struct Crop : OpBase {
     DEPTHAI_SERIALIZE(Crop, width, height, normalized, center);
 };
 
-struct Undistort : OpBase {
-    float enable;
-
-    Undistort() {}
-    Undistort(float enable) : enable(enable) {}
-
-    Undistort clone() const {
-        return *this;
-    }
-
-    std::string toStr() const override {
-        std::stringstream ss;
-        ss.imbue(std::locale(""));
-        ss << "U:e=" << enable;
-        return ss.str();
-    }
-
-    DEPTHAI_SERIALIZE(Undistort, enable);
-};
-
 struct ManipOp {
-    std::variant<Translate, Rotate, Resize, Flip, Affine, Perspective, FourPoints, Crop, Undistort> op;
+    std::variant<Translate, Rotate, Resize, Flip, Affine, Perspective, FourPoints, Crop> op;
 
     ManipOp() = default;
     ManipOp(Translate op) : op(op) {}    // NOLINT
@@ -223,7 +203,6 @@ struct ManipOp {
     ManipOp(Perspective op) : op(op) {}  // NOLINT
     ManipOp(FourPoints op) : op(op) {}   // NOLINT
     ManipOp(Crop op) : op(op) {}         // NOLINT
-    ManipOp(Undistort op) : op(op) {}    // NOLINT
 
     DEPTHAI_SERIALIZE(ManipOp, op);
 };
@@ -246,6 +225,7 @@ class ImageManipOpsBase : public ImageManipOpsEnums {
     uint8_t backgroundG = 0;
     uint8_t backgroundB = 0;
     Colormap colormap = Colormap::NONE;
+    bool undistort = false;
 
     C operations{};
 
@@ -263,6 +243,7 @@ class ImageManipOpsBase : public ImageManipOpsEnums {
         to.backgroundG = backgroundG;
         to.backgroundB = backgroundB;
         to.colormap = colormap;
+        to.undistort = undistort;
 
         to.operations.clear();
         to.operations.insert(to.operations.end(), operations.begin(), operations.end());
@@ -409,7 +390,7 @@ class ImageManipOpsBase : public ImageManipOpsEnums {
     }
 
     DEPTHAI_SERIALIZE(
-        ImageManipOpsBase, operations, outputWidth, outputHeight, center, resizeMode, background, backgroundR, backgroundG, backgroundB, colormap);
+        ImageManipOpsBase, operations, outputWidth, outputHeight, center, resizeMode, background, backgroundR, backgroundG, backgroundB, colormap, undistort);
 };
 
 /**

From 175bbc8537a1f91dee5ed7c9eeb7b32c6b6a30ff Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Wed, 15 Jan 2025 19:01:00 +0200
Subject: [PATCH 62/68] Remove ImageManip Undistort constructor

---
 include/depthai/pipeline/datatype/ImageManipConfigV2.hpp | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
index 3367409c4..c566802bc 100644
--- a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
+++ b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
@@ -288,11 +288,6 @@ class ImageManipOpsBase : public ImageManipOpsEnums {
         return *this;
     }
 
-    ImageManipOpsBase& undistort(bool enable) {
-        operations.emplace_back(Undistort(enable));
-        return *this;
-    }
-
     ImageManipOpsBase& crop(float x, float y, float w, float h, bool normalized = false, bool center = false) {
         operations.emplace_back(Translate(-x, -y, normalized));
         operations.emplace_back(Crop(w, h, normalized, center));

From 8d603170158821903d92342230ca12120c4abfa1 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Wed, 15 Jan 2025 19:12:24 +0200
Subject: [PATCH 63/68] Update FW

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 245952630..50ddd606e 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+20511ecf4c493889543f5ce0bba377314930ac8a")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+84c5c0523a6da38977bed5703d52cf4f1474ff8b")
diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 5af579c6a..c56fa16b3 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "e9617dd91000f84dc3a54e52d145bffccc749acf")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "108b7c0bd0a963401dedf929417eeee5acd4bdb2")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 3ed541201e9cfc4541366f3c8b59f941c187b86b Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Thu, 16 Jan 2025 15:17:15 +0200
Subject: [PATCH 64/68] Update FW

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 50ddd606e..070d0202f 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+84c5c0523a6da38977bed5703d52cf4f1474ff8b")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+fc00fb1af4e235905d013e328fae13c537530a99")
diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index c56fa16b3..8b2e4ea9f 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "108b7c0bd0a963401dedf929417eeee5acd4bdb2")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "5d6cb937e3c4bd3a3e08abbe1e56d1ebd7912953")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From 48dc5ab044935ba508a6c90caf08517ca73bea06 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 20 Jan 2025 19:10:14 +0200
Subject: [PATCH 65/68] Add setter/getter for undistort

---
 .gitignore                                    |  2 ++
 .../datatype/ImageManipConfigV2Bindings.cpp   |  2 ++
 .../pipeline/datatype/ImageManipConfigV2.hpp  | 20 +++++++++++++++++++
 src/pipeline/datatype/ImageManipConfigV2.cpp  |  9 +++++++++
 4 files changed, 33 insertions(+)

diff --git a/.gitignore b/.gitignore
index 78a777949..2cb33250f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,5 @@ _builds/
 
 *.swp
 /env
+
+.history/
\ No newline at end of file
diff --git a/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp b/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp
index 147f006cc..14eba852a 100644
--- a/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp
+++ b/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp
@@ -100,4 +100,6 @@ void bind_imagemanipconfigv2(pybind11::module& m, void* pCallstack) {
              static_cast<ImageManipConfigV2& (ImageManipConfigV2::*)(Colormap)>(&ImageManipConfigV2::setColormap),
              py::arg("colormap"),
              DOC(dai, ImageManipConfigV2, setColormap));
+          .def("setUndistort", &ImageManipConfigV2::setUndistort, py::arg("undistort"), DOC(dai, ImageManipConfigV2, setUndistort))
+          .def("getUndistort", &ImageManipConfigV2::getUndistort, DOC(dai, ImageManipConfigV2, getUndistort));
 }
diff --git a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
index c566802bc..2a803ce06 100644
--- a/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
+++ b/include/depthai/pipeline/datatype/ImageManipConfigV2.hpp
@@ -375,6 +375,15 @@ class ImageManipOpsBase : public ImageManipOpsEnums {
         return *this;
     }
 
+    ImageManipOpsBase& setUndistort(bool undistort) {
+        this->undistort = undistort;
+        return *this;
+    }
+
+    bool getUndistort() const {
+        return undistort;
+    }
+
     const C& getOperations() const {
         return this->operations;
     }
@@ -520,6 +529,17 @@ class ImageManipConfigV2 : public Buffer {
      */
     ImageManipConfigV2& setFrameType(ImgFrame::Type frameType);
 
+    /**
+     * Sets the undistort flag
+     */
+    ImageManipConfigV2& setUndistort(bool undistort);
+
+    /**
+     * Gets the undistort flag
+     * @returns True if undistort is enabled, false otherwise
+     */
+    bool getUndistort() const;
+
     /**
      * Instruct ImageManip to not remove current image from its queue and use the same for next message.
      * @param reuse True to enable reuse, false otherwise
diff --git a/src/pipeline/datatype/ImageManipConfigV2.cpp b/src/pipeline/datatype/ImageManipConfigV2.cpp
index 174c38414..54cd03f4d 100644
--- a/src/pipeline/datatype/ImageManipConfigV2.cpp
+++ b/src/pipeline/datatype/ImageManipConfigV2.cpp
@@ -86,6 +86,15 @@ ImageManipConfigV2& ImageManipConfigV2::setFrameType(ImgFrame::Type frameType) {
     return *this;
 }
 
+ImageManipConfigV2& ImageManipConfigV2::setUndistort(bool undistort) {
+    base.setUndistort(undistort);
+    return *this;
+}
+
+bool ImageManipConfigV2::getUndistort() const {
+    return base.getUndistort();
+}
+
 ImageManipConfigV2& ImageManipConfigV2::setReusePreviousImage(bool reuse) {
     reusePreviousImage = reuse;
     return *this;

From 4b7b911092989c7f2b78d2c0ed3f030371bdd111 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 20 Jan 2025 19:13:17 +0200
Subject: [PATCH 66/68] Update FW

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 cmake/Depthai/DepthaiDeviceSideConfig.cmake | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 070d0202f..2cd33e630 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+fc00fb1af4e235905d013e328fae13c537530a99")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+13f5b438c0f22b25db93103e8f43455c640c7f3d")
diff --git a/cmake/Depthai/DepthaiDeviceSideConfig.cmake b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
index 8b2e4ea9f..4297c1b69 100644
--- a/cmake/Depthai/DepthaiDeviceSideConfig.cmake
+++ b/cmake/Depthai/DepthaiDeviceSideConfig.cmake
@@ -2,7 +2,7 @@
 set(DEPTHAI_DEVICE_SIDE_MATURITY "snapshot")
 
 # "full commit hash of device side binary"
-set(DEPTHAI_DEVICE_SIDE_COMMIT "5d6cb937e3c4bd3a3e08abbe1e56d1ebd7912953")
+set(DEPTHAI_DEVICE_SIDE_COMMIT "976351fda3b70483e37882f989686bf0aa8c604d")
 
 # "version if applicable"
 set(DEPTHAI_DEVICE_SIDE_VERSION "")

From ef386c0898b621693bf6fbbd265f6ee334adb02b Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 20 Jan 2025 19:22:45 +0200
Subject: [PATCH 67/68] Update bindings

---
 .../src/pipeline/datatype/ImageManipConfigV2Bindings.cpp      | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp b/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp
index 14eba852a..36c29a82c 100644
--- a/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp
+++ b/bindings/python/src/pipeline/datatype/ImageManipConfigV2Bindings.cpp
@@ -96,10 +96,10 @@ void bind_imagemanipconfigv2(pybind11::module& m, void* pCallstack) {
         .def("setReusePreviousImage", &ImageManipConfigV2::setReusePreviousImage, py::arg("reuse"), DOC(dai, ImageManipConfigV2, setReusePreviousImage))
         .def("setSkipCurrentImage", &ImageManipConfigV2::setSkipCurrentImage, py::arg("skip"), DOC(dai, ImageManipConfigV2, setSkipCurrentImage))
         .def("setFrameType", &ImageManipConfigV2::setFrameType, py::arg("type"), DOC(dai, ImageManipConfigV2, setFrameType))
+        .def("setUndistort", &ImageManipConfigV2::setUndistort, py::arg("undistort"), DOC(dai, ImageManipConfigV2, setUndistort))
+        .def("getUndistort", &ImageManipConfigV2::getUndistort, DOC(dai, ImageManipConfigV2, getUndistort))
         .def("setColormap",
              static_cast<ImageManipConfigV2& (ImageManipConfigV2::*)(Colormap)>(&ImageManipConfigV2::setColormap),
              py::arg("colormap"),
              DOC(dai, ImageManipConfigV2, setColormap));
-          .def("setUndistort", &ImageManipConfigV2::setUndistort, py::arg("undistort"), DOC(dai, ImageManipConfigV2, setUndistort))
-          .def("getUndistort", &ImageManipConfigV2::getUndistort, DOC(dai, ImageManipConfigV2, getUndistort));
 }

From 72cc2a13061c1774cd97853472ccd2d592161223 Mon Sep 17 00:00:00 2001
From: SzabolcsGergely <szabi@luxonis.com>
Date: Mon, 20 Jan 2025 19:26:48 +0200
Subject: [PATCH 68/68] Update RVC4 FW

---
 cmake/Depthai/DepthaiDeviceRVC4Config.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
index 2cd33e630..57dab5157 100644
--- a/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
+++ b/cmake/Depthai/DepthaiDeviceRVC4Config.cmake
@@ -4,4 +4,4 @@ set(DEPTHAI_DEVICE_RVC4_MATURITY "snapshot")
 
 # "version if applicable"
 # set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+93f7b75a885aa32f44c5e9f53b74470c49d2b1af")
-set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+13f5b438c0f22b25db93103e8f43455c640c7f3d")
+set(DEPTHAI_DEVICE_RVC4_VERSION "0.0.1+a0274cd7dafa3622160fe0c7d1fccfc1937ec268")