From 537548a48fbdf70b0ee6d373b66db120447a242a Mon Sep 17 00:00:00 2001 From: aljazkonec1 Date: Tue, 26 May 2026 17:31:40 +0200 Subject: [PATCH 1/2] Set rvalues instead of lvalues to Buffer data to avoid incorrect VectorMemory sizes. --- src/pipeline/datatype/ImgDetectionsT.cpp | 8 +++++--- src/pipeline/datatype/SegmentationMask.cpp | 5 +++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/pipeline/datatype/ImgDetectionsT.cpp b/src/pipeline/datatype/ImgDetectionsT.cpp index 88a8597db0..e9111b3355 100644 --- a/src/pipeline/datatype/ImgDetectionsT.cpp +++ b/src/pipeline/datatype/ImgDetectionsT.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "depthai/pipeline/datatype/ImgDetections.hpp" @@ -27,7 +28,8 @@ void ImgDetectionsT::setSegmentationMask(const std::vectorsegmentationMaskWidth = width; this->segmentationMaskHeight = height; } @@ -39,7 +41,7 @@ void ImgDetectionsT::setSegmentationMask(dai::ImgFrame& frame) { } auto dataSpan = frame.getData(); std::vector vecMask(dataSpan.begin(), dataSpan.end()); - setData(vecMask); + setData(std::move(vecMask)); this->segmentationMaskWidth = frame.getWidth(); this->segmentationMaskHeight = frame.getHeight(); } @@ -87,7 +89,7 @@ void ImgDetectionsT::setCvSegmentationMask(cv::Mat mask) { } else { dataVec.insert(dataVec.begin(), mask.datastart, mask.dataend); } - setData(dataVec); + setData(std::move(dataVec)); this->segmentationMaskWidth = mask.cols; this->segmentationMaskHeight = mask.rows; } diff --git a/src/pipeline/datatype/SegmentationMask.cpp b/src/pipeline/datatype/SegmentationMask.cpp index 82e8a6863b..3c1184205e 100644 --- a/src/pipeline/datatype/SegmentationMask.cpp +++ b/src/pipeline/datatype/SegmentationMask.cpp @@ -43,7 +43,8 @@ void SegmentationMask::setMask(const std::vector& mask, size_t wid if(mask.size() != width * height) { throw std::runtime_error("SegmentationMask: data size does not match width*height"); } - setData(mask); + auto vecMask = mask; + setData(std::move(vecMask)); this->width = width; this->height = height; } @@ -240,7 +241,7 @@ void SegmentationMask::setCvMask(cv::Mat mask) { } else { dataVec.insert(dataVec.begin(), mask.datastart, mask.dataend); } - setData(dataVec); + setData(std::move(dataVec)); this->width = mask.cols; this->height = mask.rows; } From 0b094c5c3e368f38d0fe997d25679712716bb045 Mon Sep 17 00:00:00 2001 From: aljazkonec1 Date: Wed, 27 May 2026 10:17:36 +0200 Subject: [PATCH 2/2] Add comments to describe the reason for setting a rvalue --- src/pipeline/datatype/ImgDetectionsT.cpp | 8 ++++---- src/pipeline/datatype/SegmentationMask.cpp | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/pipeline/datatype/ImgDetectionsT.cpp b/src/pipeline/datatype/ImgDetectionsT.cpp index e9111b3355..b38da049bf 100644 --- a/src/pipeline/datatype/ImgDetectionsT.cpp +++ b/src/pipeline/datatype/ImgDetectionsT.cpp @@ -28,8 +28,8 @@ void ImgDetectionsT::setSegmentationMask(const std::vectorsegmentationMaskWidth = width; this->segmentationMaskHeight = height; } @@ -41,7 +41,7 @@ void ImgDetectionsT::setSegmentationMask(dai::ImgFrame& frame) { } auto dataSpan = frame.getData(); std::vector vecMask(dataSpan.begin(), dataSpan.end()); - setData(std::move(vecMask)); + setData(std::move(vecMask)); // Call the rvalue overload to allocate a new memory holder this->segmentationMaskWidth = frame.getWidth(); this->segmentationMaskHeight = frame.getHeight(); } @@ -89,7 +89,7 @@ void ImgDetectionsT::setCvSegmentationMask(cv::Mat mask) { } else { dataVec.insert(dataVec.begin(), mask.datastart, mask.dataend); } - setData(std::move(dataVec)); + setData(std::move(dataVec)); // Call the rvalue overload to allocate a new memory holder this->segmentationMaskWidth = mask.cols; this->segmentationMaskHeight = mask.rows; } diff --git a/src/pipeline/datatype/SegmentationMask.cpp b/src/pipeline/datatype/SegmentationMask.cpp index 3c1184205e..a94798681f 100644 --- a/src/pipeline/datatype/SegmentationMask.cpp +++ b/src/pipeline/datatype/SegmentationMask.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "depthai/common/RotatedRect.hpp" @@ -43,8 +44,8 @@ void SegmentationMask::setMask(const std::vector& mask, size_t wid if(mask.size() != width * height) { throw std::runtime_error("SegmentationMask: data size does not match width*height"); } - auto vecMask = mask; - setData(std::move(vecMask)); + auto vecMask = mask; // Avoid mutating shared storage by moving a copy of the input into a new buffer + setData(std::move(vecMask)); // Call the rvalue overload to allocate a new memory holder this->width = width; this->height = height; } @@ -241,7 +242,7 @@ void SegmentationMask::setCvMask(cv::Mat mask) { } else { dataVec.insert(dataVec.begin(), mask.datastart, mask.dataend); } - setData(std::move(dataVec)); + setData(std::move(dataVec)); // Call the rvalue overload to allocate a new memory holder this->width = mask.cols; this->height = mask.rows; }