Feat: ImgTransformations track Extrinsics#1728
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds unit-aware Extrinsics and SE(3) helpers, extends ImgTransformation with extrinsics-based 3D projection/remapping, introduces matrix and alignment utilities (with OpenCV fallbacks), updates protobuf/serialization and Python bindings, adds tests, and integrates new AlignmentUtilities into the core build. Changes
Sequence Diagram(s)sequenceDiagram
participant App as Application
participant ImgTrans as ImgTransformation
participant Extr as Extrinsics
participant Matrix as MatrixOps
participant Align as AlignmentUtilities
App->>ImgTrans: project3DPointTo(target, point3D)
activate ImgTrans
ImgTrans->>Extr: getExtrinsicsTransformationTo(target, useSpecTranslation, unit)
activate Extr
Extr->>Matrix: getRotationMatrix(), getTranslationVector()
Matrix-->>Extr: rotation, translation
Extr->>Matrix: compose/invert transforms (matMul/invertSe3Matrix4x4)
Matrix-->>ImgTrans: 4x4 transform
deactivate Extr
ImgTrans->>Align: pixelToRay(sourcePixel, sourceIntrinsics)
Align-->>ImgTrans: ray
ImgTrans->>Matrix: transformPoint3f(4x4, rayPoint)
Matrix-->>ImgTrans: transformed 3D point
ImgTrans->>Align: rayToPixel(transformedRay, targetIntrinsics)
Align-->>App: projected 2D point
deactivate ImgTrans
sequenceDiagram
participant Point as Pixel
participant AlignUtil as AlignmentUtilities
participant CV as OpenCV (optional)
participant Solver as ManualSolver
Point->>AlignUtil: undistortPoint(px, model, coeffs)
activate AlignUtil
alt OpenCV available
AlignUtil->>CV: undistortPoints / fisheye::undistortPoints
CV-->>AlignUtil: undistorted ray
else manual solver
AlignUtil->>Solver: select model solver (perspective/fisheye/division)
Solver-->>AlignUtil: iterative solve -> undistorted ray
end
AlignUtil-->>Point: return undistorted ray
deactivate AlignUtil
Estimated code review effort🎯 4 (Complex) | ⏱️ ~70 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 18
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/utility/matrixOps.cpp (1)
258-291:⚠️ Potential issue | 🟠 MajorPotential division by zero when rotation angle is near π (180°).
The function handles the case when
angle ≈ 0, but doesn't handle the singularity whenangle ≈ π. At 180° rotation,sin(angle) ≈ 0, causingsin_angleto be near zero, which leads to division by zero or numerical instability at line 284.🐛 Proposed fix to handle the π singularity
if(std::fabs(angle) < 1e-6f) { // Angle is ~0 → zero rotation vector return {0.0f, 0.0f, 0.0f}; } float rx = R[2][1] - R[1][2]; float ry = R[0][2] - R[2][0]; float rz = R[1][0] - R[0][1]; float sin_angle = std::sqrt(rx * rx + ry * ry + rz * rz) * 0.5f; + // Handle angle ≈ π singularity + if(sin_angle < 1e-6f) { + // Extract axis from diagonal elements when sin(angle) ≈ 0 + x = std::sqrt(std::fmax(0.0f, (R[0][0] + 1.0f) * 0.5f)); + y = std::sqrt(std::fmax(0.0f, (R[1][1] + 1.0f) * 0.5f)); + z = std::sqrt(std::fmax(0.0f, (R[2][2] + 1.0f) * 0.5f)); + // Determine signs from off-diagonal elements + if(R[0][1] + R[1][0] < 0) y = -y; + if(R[0][2] + R[2][0] < 0) z = -z; + return {x * angle, y * angle, z * angle}; + } + // Normalize axis float k = 1.0f / (2.0f * sin_angle);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/utility/matrixOps.cpp` around lines 258 - 291, matrixToVector currently divides by sin_angle and handles only angle ≈ 0; add a branch to handle angle ≈ π where sin(angle) ≈ 0 to avoid division by zero: after computing angle and sin_angle in matrixToVector, if sin_angle is below a small threshold (e.g. 1e-6) treat as the π-singularity and reconstruct the rotation axis from the matrix diagonal elements (use the largest diagonal element among R[0][0], R[1][1], R[2][2] to compute axis components robustly, deriving axis from sqrt((diagonal+1)/2) and appropriate off-diagonal signs), normalize the axis, then return axis * angle; otherwise keep the existing path that computes axis via (R[2][1]-R[1][2], ...) divided by 2*sin_angle.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp`:
- Around line 180-186: Add a backward-compatible pybind wrapper for
ImgTransformation::addPadding that accepts the old keyword names and maps them
to the new semantics so existing Python code using x,y,width,height keeps
working; implement a second binding (or a lambda wrapper) named "addPadding"
that accepts py::kwargs, look for keys "x","y","width","height" and map them to
the new parameters (x -> left, y -> top, width -> right, height -> bottom),
falling back to the new names "top","bottom","left","right" if present, then
call ImgTransformation::addPadding(top, bottom, left, right); this preserves the
existing API while keeping the new explicit names.
In `@include/depthai/common/Extrinsics.hpp`:
- Around line 20-23: The code incorrectly treats a zero specTranslation as
"missing" and throws in getTransformationMatrix; remove the throw that checks
translationToUse.x/y/z == 0.0f so zero translations (identity or real zero
baseline) are accepted, and if you need to represent an absent specTranslation
replace the boolean useSpec with an explicit optional/hasSpec flag (or
std::optional<Point3f>) and branch on that instead; update references to Point3f
translationToUse, useSpec, specTranslation and any callers that rely on the old
missing-detection accordingly.
- Around line 17-30: The code currently hardcodes EEPROM_TRANSLATION_UNITS to
LengthUnit::CENTIMETER and never updates the instance's lengthUnit, so
getTranslationInUnit (and callers getTransformationMatrix,
getInverseTransformationMatrix, getTranslationVector) return wrong values when
extrinsics are stored in meters/inches; change the logic to use the instance's
lengthUnit (update/set lengthUnit when deserializing or in
setTransformationMatrix()) instead of EEPROM_TRANSLATION_UNITS, and ensure
getDistanceUnitScale is called with the stored lengthUnit -> targetUnit so
conversions use the actual stored units; update the deserialization code path
and setTransformationMatrix() to set the class member lengthUnit from the
incoming metadata.
In `@include/depthai/utility/matrixOps.hpp`:
- Around line 30-35: The function name matrix3x3toVectorMatrix is inconsistent
with the project's camelCase convention; rename it to matrix3x3ToVectorMatrix
everywhere it's declared and defined (and update any callers) to match
matrixToVector/matrix3x3ToVector and keep naming consistent with other symbols
like matrix3x3ToVectorMatrix, matrixToVector, matrix3x3ToVector,
rotationMatrixToVector, and getRotationMatrixFromProjection4x4.
In `@protos/common.proto`:
- Around line 20-25: The Extrinsics message's enum fields toCameraSocket and
lengthUnit default to proto3 zero values that differ from C++ dai::Extrinsics
defaults; update the proto so missing values are explicit by either (A) changing
the CameraBoardSocket and LengthUnit enums to include UNSPECIFIED/UNDEFINED zero
values (e.g., SOCKET_UNSPECIFIED = 0, UNIT_UNSPECIFIED = 0) and treat that as
invalid at validation time, or (B) mark the fields toCameraSocket and lengthUnit
as optional in the Extrinsics message so presence can be detected in generated
C++ and the code can fall back to dai::Extrinsics defaults when absent; modify
associated validation/deserialization logic that reads Extrinsics to handle the
new UNSPECIFIED or absent cases accordingly.
In `@src/device/CalibrationHandler.cpp`:
- Around line 563-585: Replace uses of computeExtrinsicMatrix(...) with
getCameraExtrinsics(...) when building extr and specExtrinsics so transforms are
derived correctly across arbitrary connected graphs; call
getCameraExtrinsics(cameraId, lowestSocket, false) to obtain the main extrinsics
and copy its rotation and translation into extr.rotationMatrix and
extr.translation, and also capture and set the returned translation unit on
extr; similarly call getCameraExtrinsics(cameraId, lowestSocket, true) for the
special-case transform, copy its translation into extr.specTranslation and set
that translation unit as well. Ensure you still use getCameraWithLowestId() to
pick lowestSocket and only compute specExtrinsics when cameraId != lowestSocket.
In `@src/pipeline/datatype/ImgTransformations.cpp`:
- Around line 107-108: Remove the stray extra semicolon following the return in
the function that calls rayToPixel(rectifiedRay, to); specifically delete the
redundant ";" after the return statement so the line is just "return
rayToPixel(rectifiedRay, to);" (locate the call to rayToPixel in
ImgTransformations.cpp and remove the extra semicolon and any trailing stray
token).
- Around line 494-501: In ImgTransformation::project3DPoint validate point3f.z
before dividing: add a guard at the top that checks if point3f.z <= 0 and handle
it (e.g., throw a std::invalid_argument/std::domain_error with a clear message
including the z value, or return a defined sentinel like {NAN,NAN}) to avoid
division by zero and invalid projections; keep the rest of the flow (use of
distortPoint, distortionModel, distortionCoefficients, and getIntrinsicMatrix)
unchanged.
- Around line 62-74: In pixelToRay, remove the unused early initialization of
"ray" (std::array<float, 3> ray = {px.x, px.y, 1.0f}) since it is immediately
overwritten; either return the final constructed array directly or declare "ray"
only where it's assigned (after computing undistortedRay) — adjust in pixelToRay
to eliminate the redundant variable while keeping the calls to
transformation.getSourceIntrinsicMatrixInv(), matrix::matVecMul, undistortPoint,
and the final normalization logic.
- Around line 51-60: The transformPoint3f function must explicitly handle the
degenerate case when computed w == 0; update transformPoint3f to detect w == 0
and fail loudly (e.g., throw a std::runtime_error or a dedicated exception) with
a clear message including the input point and that the homogeneous coordinate is
zero, rather than silently returning {x,y,z}; keep existing normalization for w
== 1 and other nonzero w values and document the new exception behavior in the
function comment.
- Around line 470-479: After transforming source3dPoint with
getExtrinsicsTransformationMatrixTo/to and transformPoint3f, validate the
resulting target3dPoint.z before computing targetRay: if target3dPoint.z <= 0
(zero or behind the camera) avoid dividing by z and treat the projection as
invalid (e.g., skip this point, return false, or set an out-of-bounds/invalid
flag) so callers know the mapping failed; update any caller-facing behavior
accordingly where targetRay is used.
In `@src/pipeline/utilities/Alignment/AlignmentUtilities.cpp`:
- Around line 128-132: The radial denominator denom = 1.0f + k1 * r2 + k2 * r4 +
k3 * r6 can be zero and produce inf/NaN when computing x/denom and y/denom;
guard against that by testing fabs(denom) against a small epsilon (e.g. 1e-6f)
and if it's below the threshold replace denom with copysignf(epsilon, denom) (or
otherwise clamp to the same sign) before dividing, so the existing return {x /
denom, y / denom, 1.0f} cannot produce infinities or NaNs.
In `@src/utility/matrixOps.cpp`:
- Around line 21-23: Fix the typo in the runtime error message thrown in the
matrix-vector size check: locate the guard that checks if(matrix[i].size() !=
vec.size()) and update the std::runtime_error text to use "dimensions" instead
of "dimentsions" so the message reads that all matrix rows' dimensions need to
match the vector size.
- Around line 58-65: The mateq function performs exact float equality which can
fail due to floating-point rounding; change mateq to perform an element-wise
epsilon comparison (e.g., use std::fabs(A[i][j] - B[i][j]) <= eps) with a
sensible default epsilon (e.g., 1e-6) and/or allow an optional eps parameter,
then update callers such as isEqualTransformation in ImgTransformations.cpp to
use the new epsilon-aware mateq (or pass through the same eps used by
approxEqual/isAlignedTo) so logically-equal matrices with minor precision
differences are treated as equal.
In `@tests/CMakeLists.txt`:
- Around line 355-361: Adjust the indentation of the new private_data block to
match the surrounding private_data calls: align the opening "private_data(" and
its argument lines (URL, SHA1, FILE, LOCATION img_transformations_test_data)
with the existing blocks so they use the same indentation level and style as
other private_data entries in the file.
In `@tests/src/ondevice_tests/img_transformation_test.cpp`:
- Around line 271-279: The loop currently pairs frames by index only (using
referencePoints and targetPoints) which can mismatch when frames are
dropped/reordered; modify the logic in the test (where projectPoints and
calculateProjectionErrors are called) to match frames by timestampUs instead:
either assert that referencePoints[i].timestampUs == targetPoints[i].timestampUs
before projecting, or implement a join/lookup by timestampUs (e.g., build a map
from timestampUs to target frame and find the matching target for each reference
frame) and only call projectPoints(referencePointsFrame.points,
refImgTransformation, targetImgTransformation) and
calculateProjectionErrors(...) for timestamp-matched pairs.
- Around line 322-358: The function extractTransformationTestDataFolder should
check that the archive path (TRANSFORMATION_TEST_DATA) actually exists and is
readable before calling dai::utility::filenamesInTar or
dai::utility::untarFiles; update extractTransformationTestDataFolder to
early-return tempFolder (so callers can detect missing data and self-skip) when
archivePath does not exist or is empty, and only call filenamesInTar/untarFiles
when the archive is present; reference the symbols
extractTransformationTestDataFolder, TRANSFORMATION_TEST_DATA,
dai::utility::filenamesInTar, and dai::utility::untarFiles when making the
change.
- Around line 647-655: The test currently checks mean/median/std projection
errors but misses asserting there is at least one matched projection; use the
existing projection_error_count value (errorCount) to require a positive count
before validating meanProjectionErrorPx, medianProjectionErrorPx, and
stdProjectionErrorPx. Update the test around the variables errorCount,
meanProjectionErrorPx, medianProjectionErrorPx, and stdProjectionErrorPx to add
a REQUIRE(errorCount > 0) (or equivalent) prior to the std::isfinite checks so
empty inputs (where calculateMeanError returns -1.f) cannot make the test pass.
---
Outside diff comments:
In `@src/utility/matrixOps.cpp`:
- Around line 258-291: matrixToVector currently divides by sin_angle and handles
only angle ≈ 0; add a branch to handle angle ≈ π where sin(angle) ≈ 0 to avoid
division by zero: after computing angle and sin_angle in matrixToVector, if
sin_angle is below a small threshold (e.g. 1e-6) treat as the π-singularity and
reconstruct the rotation axis from the matrix diagonal elements (use the largest
diagonal element among R[0][0], R[1][1], R[2][2] to compute axis components
robustly, deriving axis from sqrt((diagonal+1)/2) and appropriate off-diagonal
signs), normalize the axis, then return axis * angle; otherwise keep the
existing path that computes axis via (R[2][1]-R[1][2], ...) divided by
2*sin_angle.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 08ccc2d3-0635-4f8c-871d-a3dc1a0447b6
📒 Files selected for processing (22)
CMakeLists.txtbindings/python/src/CalibrationHandlerBindings.cppbindings/python/src/pipeline/CommonBindings.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppbindings/python/src/pipeline/datatype/StereoDepthConfigBindings.cppcmake/Depthai/DepthaiDeviceRVC4Config.cmakecmake/Depthai/DepthaiDeviceSideConfig.cmakeinclude/depthai/common/DepthUnit.hppinclude/depthai/common/Extrinsics.hppinclude/depthai/common/ImgTransformations.hppinclude/depthai/device/CalibrationHandler.hppinclude/depthai/pipeline/datatype/StereoDepthConfig.hppinclude/depthai/utility/matrixOps.hppprotos/common.protosrc/device/CalibrationHandler.cppsrc/pipeline/datatype/ImgTransformations.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.hppsrc/utility/ProtoSerialize.cppsrc/utility/matrixOps.cpptests/CMakeLists.txttests/src/ondevice_tests/img_transformation_test.cpp
📜 Review details
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: examples/python/AutoCalibration/auto_calibration_example.py:99-106
Timestamp: 2026-03-16T23:22:52.039Z
Learning: In `examples/python/AutoCalibration/auto_calibration_example.py`, no shape validation guard is needed before slicing the result of `calibrationHandler.getCameraExtrinsics()`, as the API is guaranteed to return a valid matrix. Do not flag this as an issue in future reviews.
📚 Learning: 2026-03-16T23:22:52.039Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: examples/python/AutoCalibration/auto_calibration_example.py:99-106
Timestamp: 2026-03-16T23:22:52.039Z
Learning: In `examples/python/AutoCalibration/auto_calibration_example.py`, no shape validation guard is needed before slicing the result of `calibrationHandler.getCameraExtrinsics()`, as the API is guaranteed to return a valid matrix. Do not flag this as an issue in future reviews.
Applied to files:
bindings/python/src/CalibrationHandlerBindings.cppsrc/device/CalibrationHandler.cpp
📚 Learning: 2026-03-16T11:17:12.819Z
Learnt from: pheec
Repo: luxonis/depthai-core PR: 1715
File: include/depthai/pipeline/node/PointCloud.hpp:34-98
Timestamp: 2026-03-16T11:17:12.819Z
Learning: In `include/depthai/pipeline/node/PointCloud.hpp`, the nested `Impl` class inside `PointCloud` is intentionally public (not private/forward-declared) because the on-host unit tests in `tests/src/onhost_tests/point_cloud_test.cpp` directly access `Impl` methods such as `setIntrinsics`, `setExtrinsics`, `useCPU`, `useCPUMT`, `computePointCloudDense`, `applyTransformation`, and `filterValidPoints`. Do not suggest making `Impl` private or forward-declaring it.
Applied to files:
tests/CMakeLists.txttests/src/ondevice_tests/img_transformation_test.cppsrc/pipeline/datatype/ImgTransformations.cpp
🧬 Code graph analysis (7)
bindings/python/src/CalibrationHandlerBindings.cpp (2)
src/device/CalibrationHandler.cpp (5)
getExtrinsicsToLowestSocket(558-588)getExtrinsicsToLowestSocket(558-558)CalibrationHandler(131-145)CalibrationHandler(156-284)CalibrationHandler(286-291)include/depthai/device/CalibrationHandler.hpp (4)
CalibrationHandler(31-31)CalibrationHandler(40-40)CalibrationHandler(50-52)CalibrationHandler(60-60)
bindings/python/src/pipeline/datatype/StereoDepthConfigBindings.cpp (2)
include/depthai/pipeline/datatype/StereoDepthConfig.hpp (3)
StereoDepthConfig(21-21)StereoDepthConfig(22-22)StereoDepthConfig(826-828)src/pipeline/datatype/StereoDepthConfig.cpp (1)
StereoDepthConfig(5-5)
src/utility/ProtoSerialize.cpp (2)
include/depthai/common/ImgTransformations.hpp (7)
extrinsics(253-253)ImgTransformation(42-42)ImgTransformation(43-43)ImgTransformation(44-45)ImgTransformation(46-49)ImgTransformation(50-63)ImgTransformation(65-80)include/depthai/common/Extrinsics.hpp (1)
rotationMatrix(51-62)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp (4)
src/utility/matrixOps.cpp (8)
matMul(67-79)matMul(67-67)matMul(81-128)matMul(81-81)matVecMul(11-29)matVecMul(11-11)matVecMul(31-39)matVecMul(31-31)include/depthai/utility/matrixOps.hpp (4)
matMul(12-12)matMul(13-13)matVecMul(15-15)matVecMul(16-16)include/depthai/common/ImgTransformations.hpp (20)
x(203-203)x(207-207)x(221-221)point(87-87)point(99-99)point(294-294)model(255-255)from(272-272)from(286-286)from(321-321)from(337-337)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)src/pipeline/utilities/Alignment/AlignmentUtilities.hpp (11)
coeffAt(105-105)applyTilt(52-52)hasNonZeroDistortion(100-100)distortPerspective(37-37)distortFisheye(42-42)distortRadialDivision(47-47)undistortPerspective(70-70)undistortFisheye(75-75)undistortRadialDivision(80-80)undistortPoint(85-85)distortPoint(57-57)
src/pipeline/datatype/ImgTransformations.cpp (5)
include/depthai/common/Extrinsics.hpp (12)
matrix(122-138)matrix(122-122)to(182-202)to(182-184)other(160-173)other(160-160)useSpecTranslation(87-105)useSpecTranslation(87-87)useSpecTranslation(107-110)useSpecTranslation(107-107)useSpecTranslation(145-152)useSpecTranslation(145-145)include/depthai/common/ImgTransformations.hpp (30)
matrix(213-213)point(87-87)point(99-99)point(294-294)x(203-203)x(207-207)x(221-221)from(272-272)from(286-286)from(321-321)from(337-337)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)other(159-159)transformationMatrix(161-163)source(184-184)source(190-190)source(196-196)width(251-251)width(252-252)extrinsics(253-253)rect(93-93)rect(105-105)src/utility/matrixOps.cpp (12)
matVecMul(11-29)matVecMul(11-11)matVecMul(31-39)matVecMul(31-31)mateq(41-56)mateq(41-41)mateq(58-65)mateq(58-58)matMul(67-79)matMul(67-67)matMul(81-128)matMul(81-81)include/depthai/utility/matrixOps.hpp (6)
matVecMul(15-15)matVecMul(16-16)mateq(18-18)mateq(19-19)matMul(12-12)matMul(13-13)src/pipeline/utilities/Alignment/AlignmentUtilities.hpp (2)
undistortPoint(85-85)distortPoint(57-57)
src/utility/matrixOps.cpp (2)
include/depthai/common/Extrinsics.hpp (3)
matrix(122-138)matrix(122-122)rotationMatrix(51-62)include/depthai/utility/matrixOps.hpp (2)
matrixToVector(30-30)matrix3x3toVectorMatrix(33-33)
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp (3)
include/depthai/common/ImgTransformations.hpp (18)
ImgTransformation(42-42)ImgTransformation(43-43)ImgTransformation(44-45)ImgTransformation(46-49)ImgTransformation(50-63)ImgTransformation(65-80)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)point(87-87)point(99-99)point(294-294)src/pipeline/datatype/ImgFrame.cpp (8)
setSize(159-163)setSize(159-159)setSize(164-167)setSize(164-164)setSourceSize(169-175)setSourceSize(169-169)setSourceSize(177-180)setSourceSize(177-177)include/depthai/common/Extrinsics.hpp (2)
to(182-202)to(182-184)
🪛 Cppcheck (2.20.0)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[error] 204-204: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 40-40: Include file
(missingIncludeSystem)
[information] 43-43: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
tests/src/ondevice_tests/img_transformation_test.cpp
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingInclude)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingInclude)
[information] 18-18: Include file
(missingInclude)
[information] 19-19: Include file
(missingInclude)
[information] 20-20: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 22-22: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 25-25: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[error] 204-204: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
src/pipeline/datatype/ImgTransformations.cpp
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
src/utility/matrixOps.cpp
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[style] 11-11: The function 'matVecMul' is never used.
(unusedFunction)
[style] 41-41: The function 'mateq' is never used.
(unusedFunction)
[style] 67-67: The function 'matMul' is never used.
(unusedFunction)
[style] 304-304: The function 'matrix3x3ToVector' is never used.
(unusedFunction)
[style] 309-309: The function 'getRotationMatrixFromProjection4x4' is never used.
(unusedFunction)
[style] 436-436: The function 'invertSe3Matrix4x4' is never used.
(unusedFunction)
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
[error] 204-204: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
🔇 Additional comments (27)
include/depthai/pipeline/datatype/StereoDepthConfig.hpp (1)
30-30: LGTM!The
DepthAlignenum extension withLEFTandRIGHTvalues is clean. Adding new values at the end preserves backward compatibility with existing serialized data since the implicit integer values for existing entries remain unchanged.bindings/python/src/pipeline/datatype/StereoDepthConfigBindings.cpp (1)
65-73: LGTM!The Python bindings correctly expose both new
LEFTandRIGHTenum values. The binding declaration order doesn't affect the underlying integer values—pybind11 uses the values from the C++ enum definition. All fiveDepthAlignvalues are now properly exposed to Python.include/depthai/common/DepthUnit.hpp (1)
57-59: LGTM!The unit conversion logic is correct. The formula
targetMultiplier / sourceMultiplierproperly converts values from the source unit to the target unit, where multipliers represent "units per meter."include/depthai/utility/matrixOps.hpp (2)
12-19: LGTM!The new matrix operation overloads provide both dynamic (
std::vector) and fixed-size (std::array) variants, which is a good API design for flexibility and performance.
39-41: LGTM!The non-mutating
invertSe3Matrix4x4wrapper alongside the in-place version provides a cleaner API for callers who don't want to modify their input.cmake/Depthai/DepthaiDeviceSideConfig.cmake (1)
5-5: Device-side firmware bump.Ensure the new device-side commit
cbd439b5965d875aab4f22282665a89ca07f50dchas been tested with the new extrinsics and image transformation APIs introduced in this PR.cmake/Depthai/DepthaiDeviceRVC4Config.cmake (1)
6-6: RVC4 firmware version bump.Standard version update to align with new extrinsics support. Confirm compatibility testing has been performed.
bindings/python/src/CalibrationHandlerBindings.cpp (1)
87-90: LGTM!The Python binding for
getExtrinsicsToLowestSocketfollows the established pattern and properly exposes the new C++ API with appropriate documentation.CMakeLists.txt (1)
325-325: LGTM!New alignment utilities source file correctly added to the core library build.
include/depthai/device/CalibrationHandler.hpp (2)
230-236: LGTM!The new
getExtrinsicsToLowestSocketAPI is well-documented and the implementation (per the relevant snippets) correctly handles edge cases including the identity transform whensrcCameraequals the lowest socket.
728-733: LGTM!The protected
getCameraWithLowestIdhelper is appropriately scoped for internal use and supports the new publicgetExtrinsicsToLowestSocketAPI.tests/CMakeLists.txt (1)
652-657: LGTM!The test is correctly guarded by
DEPTHAI_FETCH_ARTIFACTSsince it depends on the downloaded test data archive. The compile definition properly wires the test executable to the data location.src/pipeline/utilities/Alignment/AlignmentUtilities.cpp (1)
341-345: No action needed - the code uses the correct OpenCV C++ API.The
cv::undistortPointsfunction in the official OpenCV C++ API does accept acv::TermCriteriaparameter. The signaturecv::undistortPoints(InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray P, TermCriteria criteria)is a standard overload for iterative undistortion control. The separate nameundistortPointsIteris only exposed in the Python API; in C++, iterative behavior is controlled via theTermCriteriaoverload ofcv::undistortPoints. The code is portable and correct.> Likely an incorrect or invalid review comment.include/depthai/common/ImgTransformations.hpp (5)
3-6: LGTM!The new includes for
<array>andExtrinsics.hppare correctly added to support the new extrinsics functionality.
65-80: LGTM!The new constructor overload is well-designed with proper use of
std::movefor thedistortionCoefficientsandextrinsicsparameters to avoid unnecessary copies.
148-167: LGTM!The new accessor methods and equality check are well-designed and follow the existing patterns in the class.
288-337: LGTM!The new 3D projection and remapping APIs are well-documented with clear notes about coordinate system assumptions. The API design is comprehensive and consistent.
374-386: No backward compatibility concern with serialization order.The
extrinsicsfield uses nlohmann/json for JSON serialization, where field names (not order) determine deserialization. In the protobuf wire format, field numbers determine compatibility—extrinsicsis field 9, a properly-numbered optional field. Deserialization already handles missing fields viahas_extrinsics()checks, so there is no backward compatibility risk.src/utility/matrixOps.cpp (3)
67-79: LGTM!The fixed-size 3x3 matrix multiplication is correctly implemented.
81-128: LGTM!The dynamic matrix multiplication has comprehensive input validation covering empty matrices, non-rectangular shapes, and dimension compatibility.
436-461: LGTM!The non-inplace SE(3) matrix inversion is correctly implemented using the formula
T^(-1) = [R^T | -R^T * t; 0 | 1].src/pipeline/datatype/ImgTransformations.cpp (2)
154-168: LGTM!The
isEqualTransformationmethod comprehensively compares all relevant fields. Note that it uses exact float comparison viamatrix::mateq, which was flagged in thematrixOps.cppreview.
503-541: LGTM!The 3D projection/remapping helper methods and extrinsics accessors correctly delegate to the underlying implementations.
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp (4)
134-141: LGTM!The new constructor binding with
Extrinsicsparameter correctly matches the C++ API.
156-177: LGTM!The new getter and setter method bindings correctly expose the C++ API with proper documentation references.
199-207: LGTM!The
projectPointTobinding correctly uses a lambda wrapper to handle the C++ reference parameter, preventing unintended mutation of Python objects. The 3D projection method bindings are well-designed.
208-213: LGTM!The
getExtrinsicsTransformationMatrixTobinding correctly exposes the method with matching default parameter values.
MaticTonin
left a comment
There was a problem hiding this comment.
Overall PR looks good, I suggest some API changes, will go more into depth for logic tomorrow.
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/utility/matrixOps.cpp (1)
349-364:⚠️ Potential issue | 🟠 MajorHandle the 180° rotation case before dividing by
sin_angle.For valid π-rotation matrices such as
diag(1, -1, -1), Lines 354-364 producerx == ry == rz == 0, sosin_anglebecomes 0 and the axis normalization returns NaNs. This helper needs a dedicated near-π branch that recovers the axis from the diagonal terms instead of the skew-symmetric part.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/utility/matrixOps.cpp` around lines 349 - 364, The code currently divides by sin_angle to compute the rotation axis (using rx/ry/rz) which breaks down for near-π rotations (rx==ry==rz==0) and yields NaNs; modify the branch in the rotation-matrix-to-axis-angle routine (the block that checks std::fabs(angle) and computes rx/ry/rz, sin_angle, k, and assigns x,y,z) to handle the near-π case before dividing: when sin_angle is near zero and angle ≈ π, compute the axis from the diagonal terms of R (use axis components derived from sqrt((R[i][i] + 1)/2) choosing the largest diagonal to avoid sign ambiguity and use off-diagonal elements to set signs) instead of normalizing rx/ry/rz; keep the existing small-angle zero-rotation early return and otherwise use the current rx/ry/rz normalization path.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp`:
- Around line 193-207: The bindings use the Python keyword "from" as a py::arg
name for ImgTransformation methods remapPointFrom, remapRectFrom,
project3DPointFrom, and remap3DPointFrom which breaks Python callers; change
py::arg("from") to a non-keyword like py::arg("from_transform") (or
"source"/"src") for each of those four method bindings (remapPointFrom,
remapRectFrom, project3DPointFrom, remap3DPointFrom) so callers can use keyword
arguments without syntax errors.
In `@include/depthai/common/Extrinsics.hpp`:
- Around line 107-109: The setter currently rescales translation using
getDistanceUnitScale(unit, lengthUnit) and then assigns lengthUnit = unit, which
corrupts values when the stored unit was different; fix by either storing the
raw translation in the caller's unit and then setting lengthUnit = unit (i.e.
assign translation = Point3f(matrix[0][3], matrix[1][3], matrix[2][3]) and
lengthUnit = unit in the setter that uses getDistanceUnitScale), or if you
intend to keep an internal canonical unit, convert the incoming value into the
internal unit (use getDistanceUnitScale(unit, lengthUnit) to multiply the
incoming value so stored translation stays in the canonical lengthUnit) and do
not change lengthUnit; apply the same fix to both code paths referenced around
translation/lengthUnit (the blocks with translation = Point3f(...) at lines like
107-109 and 129-131 and the call to getDistanceUnitScale).
- Around line 98-106: The setter setTransformationMatrix currently assigns the
full 4x4 input into rotationMatrix, but downstream code
(matrix::vectorMatrixToMatrix3x3, getRotationMatrix, getTransformationMatrix,
isEqualExtrinsics) expects rotationMatrix to contain only the 3x3 rotation
block; change setTransformationMatrix to extract and store only the top-left 3x3
block (matrix[0..2][0..2]) into rotationMatrix instead of copying the full 4x4,
leaving any translation/scale handling separate so other methods read a proper
3x3 rotation.
In `@include/depthai/utility/matrixOps.hpp`:
- Around line 22-23: The mateq overloads in
include/depthai/utility/matrixOps.hpp currently use a hard-coded
MATRIX_EQ_EPSILON; update the API to accept a caller-supplied epsilon by adding
a float epsilon parameter to both declarations for
std::vector<std::vector<float>> and std::array<std::array<float,3>,3> (match the
signature used in src/utility/matrixOps.cpp), then update the implementation in
src/utility/matrixOps.cpp to use that epsilon instead of MATRIX_EQ_EPSILON and
wire the caller epsilon through from dai::Extrinsics::isEqualExtrinsics so
rotation comparisons honor the provided tolerance.
In `@src/device/CalibrationHandler.cpp`:
- Around line 569-570: The call to getCameraTranslationVector(cameraId,
lowestSocket, true) leads to computeExtrinsicMatrix(..., true) which currently
throws if any link has specTranslation == {0,0,0}; change the behavior to
tolerate missing spec translations: modify computeExtrinsicMatrix (or the code
path in getCameraTranslationVector/getExtrinsicsToLowestSocket) so that when the
"useSpec" flag is true but a link's specTranslation is all zeros, you do NOT
throw—treat that link as "no spec available" and leave its translation as the
zero/default vector and continue computing the overall extrinsics instead of
aborting; ensure callers (getCameraTranslationVector, getCameraExtrinsics,
getExtrinsicsToLowestSocket) still propagate results normally.
In `@src/pipeline/datatype/ImgTransformations.cpp`:
- Around line 82-94: The code currently logs a warning when
from.getExtrinsicsTransformationMatrixTo(to) (extriniscTransformation) contains
a non-zero translation but proceeds to use only the rotation, producing wrong
pixels; change this so any non-zero translation (extriniscTransformation[0][3],
[1][3], [2][3]) causes an explicit rejection instead of continuing: detect the
translation and return/propagate a failure (e.g., return an
optional/boolean/error code or throw) from the inter-source transform path, and
update callers remapPointTo and remapRectTo to handle and propagate that failure
rather than accepting a rotation-only approximation. Ensure the check uses
extriniscTransformation and that remapPointTo/remapRectTo signatures/return
values are adjusted consistently to surface the error to callers.
In `@src/pipeline/utilities/Alignment/AlignmentUtilities.cpp`:
- Around line 83-85: The rational-perspective denominator radialDen in
distortPerspective() is only checked for exact zero and can still be near-zero;
update the logic around radialNum/radialDen to guard against small-magnitude
denominators by testing abs(radialDen) < epsilon (choose a small constant e.g.
1e-6), and either clamp radial to radialNum / sign(radialDen)*maxValue or
early-return/skip this sample (or set to a safe fallback) when the denominator
is too small; ensure you reference radialDen, radialNum and the rational
coefficients k4,k5,k6 when making this change so the remap path is protected
from exploding values.
In `@src/utility/matrixOps.cpp`:
- Around line 56-63: The mateq routine iterates inner columns using A[0].size(),
which is wrong for ragged rows; change the inner loop to use the current row
width (A[i].size(), which has already been checked equal to B[i].size()) when
iterating columns and comparing elements with MATRIX_EQ_EPSILON (i.e., replace
uses of A[0].size() with A[i].size() in the nested loop that checks A[i][j] vs
B[i][j]).
In `@tests/CMakeLists.txt`:
- Around line 652-657: The CMake logic currently guards the
img_transformation_test target with DEPTHAI_FETCH_ARTIFACTS which removes
non-artifact test cases; change the CMake so img_transformation_test is always
added (keep dai_add_test and dai_set_test_labels for img_transformation_test)
and only conditionally set the TRANSFORMATION_TEST_DATA compile definition when
DEPTHAI_FETCH_ARTIFACTS is true, otherwise define TRANSFORMATION_TEST_DATA as an
empty string; locate the target and the target_compile_definitions call for
img_transformation_test and adjust the conditional around only the definition
(or alternatively split the dataset-driven cases into a separate artifact-gated
target that references the same test source file in
tests/src/ondevice_tests/img_transformation_test.cpp).
In `@tests/src/ondevice_tests/img_transformation_test.cpp`:
- Around line 194-198: The reprojection error loop over projectedPoints is
comparing against targetPoints even when those targets are marked invalid by
decodeMcapPoints(); update the lookup in the loop that uses std::find_if (over
targetPoints with CharucoPoint p) to only consider valid targets (e.g., add
p.valid to the predicate) or otherwise skip adding errors for invalid target
points so errors.push_back(...) only records errors for valid targetPoints and
avoids using coordinates from unusable corners.
- Around line 642-662: The test currently iterates directories filling
currentResults and increments testIterator but never asserts that at least one
capture was processed; add a pre-baseline assertion (using REQUIRE or
equivalent) that testIterator > 0 (or !currentResults.empty()) right after the
loop to fail fast when no capture directories were found (reference symbols:
currentResults, testIterator, processVideo, REQUIRE).
---
Outside diff comments:
In `@src/utility/matrixOps.cpp`:
- Around line 349-364: The code currently divides by sin_angle to compute the
rotation axis (using rx/ry/rz) which breaks down for near-π rotations
(rx==ry==rz==0) and yields NaNs; modify the branch in the
rotation-matrix-to-axis-angle routine (the block that checks std::fabs(angle)
and computes rx/ry/rz, sin_angle, k, and assigns x,y,z) to handle the near-π
case before dividing: when sin_angle is near zero and angle ≈ π, compute the
axis from the diagonal terms of R (use axis components derived from
sqrt((R[i][i] + 1)/2) choosing the largest diagonal to avoid sign ambiguity and
use off-diagonal elements to set signs) instead of normalizing rx/ry/rz; keep
the existing small-angle zero-rotation early return and otherwise use the
current rx/ry/rz normalization path.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 2e0715b3-4a6e-437c-82bf-8dcfe5ab8b4b
📒 Files selected for processing (10)
bindings/python/src/pipeline/CommonBindings.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hppinclude/depthai/utility/matrixOps.hppsrc/device/CalibrationHandler.cppsrc/pipeline/datatype/ImgTransformations.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/utility/matrixOps.cpptests/CMakeLists.txttests/src/ondevice_tests/img_transformation_test.cpp
📜 Review details
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2026-03-23T09:35:30.339Z
Learnt from: aljazkonec1
Repo: luxonis/depthai-core PR: 1728
File: protos/common.proto:20-25
Timestamp: 2026-03-23T09:35:30.339Z
Learning: In the depthai-core repository (luxonis/depthai-core), the `LengthUnit` and `CameraBoardSocket` enums (defined in both C++ headers and `protos/common.proto`) are already released as public API and must not have their existing enumerator values changed or have new zero-value "UNSPECIFIED" entries prepended, as that would break existing user code and serialized data.
Applied to files:
tests/CMakeLists.txtsrc/device/CalibrationHandler.cpptests/src/ondevice_tests/img_transformation_test.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hppsrc/pipeline/datatype/ImgTransformations.cppsrc/utility/matrixOps.cppinclude/depthai/utility/matrixOps.hpp
📚 Learning: 2026-03-16T11:17:12.819Z
Learnt from: pheec
Repo: luxonis/depthai-core PR: 1715
File: include/depthai/pipeline/node/PointCloud.hpp:34-98
Timestamp: 2026-03-16T11:17:12.819Z
Learning: In `include/depthai/pipeline/node/PointCloud.hpp`, the nested `Impl` class inside `PointCloud` is intentionally public (not private/forward-declared) because the on-host unit tests in `tests/src/onhost_tests/point_cloud_test.cpp` directly access `Impl` methods such as `setIntrinsics`, `setExtrinsics`, `useCPU`, `useCPUMT`, `computePointCloudDense`, `applyTransformation`, and `filterValidPoints`. Do not suggest making `Impl` private or forward-declaring it.
Applied to files:
tests/CMakeLists.txttests/src/ondevice_tests/img_transformation_test.cppsrc/pipeline/datatype/ImgTransformations.cppinclude/depthai/utility/matrixOps.hpp
📚 Learning: 2026-03-16T23:22:52.039Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: examples/python/AutoCalibration/auto_calibration_example.py:99-106
Timestamp: 2026-03-16T23:22:52.039Z
Learning: In `examples/python/AutoCalibration/auto_calibration_example.py`, no shape validation guard is needed before slicing the result of `calibrationHandler.getCameraExtrinsics()`, as the API is guaranteed to return a valid matrix. Do not flag this as an issue in future reviews.
Applied to files:
src/device/CalibrationHandler.cpptests/src/ondevice_tests/img_transformation_test.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hppsrc/pipeline/datatype/ImgTransformations.cpp
📚 Learning: 2026-03-13T19:40:56.303Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: src/pipeline/node/AutoCalibration.cpp:327-330
Timestamp: 2026-03-13T19:40:56.303Z
Learning: In `src/pipeline/node/AutoCalibration.cpp`, the hard-coded 1280x800 resolution check in `AutoCalibration::validateIncomingData()` is intentional. The AutoCalibration node in the depthai-core (C++) project is designed to support only 1280x800 sensor resolution and this constraint should not be flagged as a usability issue in future reviews.
Applied to files:
src/device/CalibrationHandler.cpptests/src/ondevice_tests/img_transformation_test.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hppsrc/pipeline/datatype/ImgTransformations.cpp
📚 Learning: 2026-03-17T08:07:19.141Z
Learnt from: JakubFara
Repo: luxonis/depthai-core PR: 1718
File: src/pipeline/node/AutoCalibration.cpp:167-216
Timestamp: 2026-03-17T08:07:19.141Z
Learning: In `src/pipeline/node/AutoCalibration.cpp`, the `getNewCalibration` method intentionally opens the gate once before the outer recalibration retry loop and closes it only at the end (or on success). There is no need to isolate gate state between individual recalibration attempts — this single open/close pattern is by design and should not be flagged as a bug in future reviews.
Applied to files:
src/device/CalibrationHandler.cpptests/src/ondevice_tests/img_transformation_test.cpp
🧬 Code graph analysis (7)
src/device/CalibrationHandler.cpp (1)
include/depthai/device/CalibrationHandler.hpp (16)
cameraId(93-93)cameraId(117-122)cameraId(145-149)cameraId(172-176)cameraId(192-192)cameraId(203-203)cameraId(212-212)cameraId(220-220)cameraId(228-228)cameraId(361-363)cameraId(384-386)cameraId(538-538)cameraId(556-556)cameraId(573-573)cameraId(581-581)cameraId(589-589)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp (3)
include/depthai/utility/matrixOps.hpp (5)
matMul(15-15)matMul(16-16)matMul(17-17)matVecMul(19-19)matVecMul(20-20)src/utility/matrixOps.cpp (12)
matMul(77-89)matMul(77-77)matMul(91-103)matMul(91-91)matMul(105-152)matMul(105-105)matVecMul(11-29)matVecMul(11-11)matVecMul(31-39)matVecMul(31-31)matVecMul(41-49)matVecMul(41-41)src/pipeline/utilities/Alignment/AlignmentUtilities.hpp (11)
coeffAt(105-105)applyTilt(52-52)hasNonZeroDistortion(100-100)distortPerspective(37-37)distortFisheye(42-42)distortRadialDivision(47-47)undistortPerspective(70-70)undistortFisheye(75-75)undistortRadialDivision(80-80)undistortPoint(85-85)distortPoint(57-57)
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp (3)
include/depthai/common/ImgTransformations.hpp (18)
ImgTransformation(42-42)ImgTransformation(43-43)ImgTransformation(44-45)ImgTransformation(46-49)ImgTransformation(50-63)ImgTransformation(65-80)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)point(87-87)point(99-99)point(294-294)src/pipeline/datatype/ImgFrame.cpp (8)
setSize(159-163)setSize(159-159)setSize(164-167)setSize(164-164)setSourceSize(169-175)setSourceSize(169-169)setSourceSize(177-180)setSourceSize(177-177)include/depthai/common/Extrinsics.hpp (2)
to(175-195)to(175-177)
include/depthai/common/Extrinsics.hpp (3)
include/depthai/common/DepthUnit.hpp (2)
getDistanceUnitScale(57-59)getDistanceUnitScale(57-57)include/depthai/utility/matrixOps.hpp (6)
vectorMatrixToMatrix3x3(43-43)createTransformationMatrix(33-33)createTransformationMatrix(34-34)invertSe3Matrix4x4(49-49)mateq(22-22)mateq(23-23)src/utility/matrixOps.cpp (12)
vectorMatrixToMatrix3x3(381-393)vectorMatrixToMatrix3x3(381-381)createTransformationMatrix(285-296)createTransformationMatrix(285-285)createTransformationMatrix(298-300)createTransformationMatrix(298-298)invertSe3Matrix4x4(528-549)invertSe3Matrix4x4(528-528)mateq(51-66)mateq(51-51)mateq(68-75)mateq(68-68)
src/pipeline/datatype/ImgTransformations.cpp (6)
include/depthai/utility/matrixOps.hpp (9)
matVecMul(19-19)matVecMul(20-20)mateq(22-22)mateq(23-23)dehomogenizePoint3(37-37)matMul(15-15)matMul(16-16)matMul(17-17)transformPoint3f(35-35)src/utility/matrixOps.cpp (20)
matVecMul(11-29)matVecMul(11-11)matVecMul(31-39)matVecMul(31-31)matVecMul(41-49)matVecMul(41-41)mateq(51-66)mateq(51-51)mateq(68-75)mateq(68-68)dehomogenizePoint3(315-320)dehomogenizePoint3(315-315)matMul(77-89)matMul(77-77)matMul(91-103)matMul(91-91)matMul(105-152)matMul(105-105)transformPoint3f(302-306)transformPoint3f(302-302)src/pipeline/utilities/Alignment/AlignmentUtilities.cpp (4)
undistortPoint(265-280)undistortPoint(265-265)distortPoint(136-149)distortPoint(136-136)src/pipeline/utilities/Alignment/AlignmentUtilities.hpp (2)
undistortPoint(85-85)distortPoint(57-57)include/depthai/common/ImgTransformations.hpp (28)
from(272-272)from(286-286)from(321-321)from(337-337)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)other(159-159)point(87-87)point(99-99)point(294-294)transformationMatrix(161-163)source(184-184)source(190-190)source(196-196)extrinsics(253-253)matrix(213-213)rect(93-93)rect(105-105)x(203-203)x(207-207)x(221-221)include/depthai/common/Extrinsics.hpp (14)
to(175-195)to(175-177)other(153-166)other(153-153)matrix(98-110)matrix(98-98)matrix(122-132)matrix(122-122)useSpecTranslation(79-81)useSpecTranslation(79-79)useSpecTranslation(83-86)useSpecTranslation(83-83)useSpecTranslation(138-145)useSpecTranslation(138-138)
src/utility/matrixOps.cpp (1)
include/depthai/utility/matrixOps.hpp (5)
matVecMul(19-19)matVecMul(20-20)dehomogenizePoint4(36-36)matrixToVector(39-39)matrix3x3ToVectorMatrix(42-42)
include/depthai/utility/matrixOps.hpp (1)
include/depthai/common/Extrinsics.hpp (4)
matrix(98-110)matrix(98-98)matrix(122-132)matrix(122-122)
🪛 Cppcheck (2.20.0)
src/device/CalibrationHandler.cpp
[information] 1-1: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingInclude)
tests/src/ondevice_tests/img_transformation_test.cpp
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingInclude)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingInclude)
[information] 18-18: Include file
(missingInclude)
[information] 19-19: Include file
(missingInclude)
[information] 20-20: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 22-22: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 25-25: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[error] 197-197: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[error] 197-197: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 40-40: Include file
(missingIncludeSystem)
[information] 43-43: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
bindings/python/src/pipeline/CommonBindings.cpp
[information] 4-4: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
[error] 197-197: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
src/pipeline/datatype/ImgTransformations.cpp
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
src/utility/matrixOps.cpp
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is a macro then please configure it.
(unknownMacro)
🔇 Additional comments (1)
bindings/python/src/pipeline/CommonBindings.cpp (1)
539-550: The review comment's code snippet does not match the actual state of the code. The actual bindings at lines 539–550 are syntactically correct and complete:py::overload_cast<const std::vector<std::vector<float>>&, LengthUnit>(&Extrinsics::setTransformationMatrix) py::overload_cast<const std::array<std::array<float, 4>, 4>&, LengthUnit>(&Extrinsics::setTransformationMatrix)Both overloads properly specify the full signature—the matrix parameter type and the
LengthUnitparameter—matching the C++ header declarations. The bindings will compile correctly.> Likely an incorrect or invalid review comment.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@bindings/python/src/pipeline/CommonBindings.cpp`:
- Line 3: Remove the unnecessary internal pybind11 header include by deleting
the line that includes <pybind11/detail/common.h>; CommonBindings.cpp only uses
public pybind11 types (py::class_, py::enum_, py::module) which are already
provided by the existing `#include` <pybind11/pybind11.h>, so keep that include
and remove the internal one to avoid depending on pybind11 internals.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 6cff46ba-cdb9-43c9-ab3e-acc0cf09707b
📒 Files selected for processing (1)
bindings/python/src/pipeline/CommonBindings.cpp
📜 Review details
🧰 Additional context used
🪛 Cppcheck (2.20.0)
bindings/python/src/pipeline/CommonBindings.cpp
[information] 4-4: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
🔇 Additional comments (2)
bindings/python/src/pipeline/CommonBindings.cpp (2)
6-7: LGTM!The
<array>and<vector>includes are correctly added to support the newsetTransformationMatrixoverloads.
525-560: Well-structured Extrinsics bindings expansion with complete C++ method coverage.All bound methods and attributes are properly implemented in the C++
Extrinsicsclass:
toCameraSocketandlengthUnitattributes correctly exposed as readwrite- All six query methods (
getRotationMatrix,getInverseRotationMatrix,getTransformationMatrix,getInverseTransformationMatrix,getTranslationVector,getExtrinsicsTransformationTo) present with matching signatures- Both
setTransformationMatrixoverloads correctly disambiguated usingpy::overload_castforstd::vector<std::vector<float>>&andstd::array<std::array<float, 4>, 4>&- Default arguments (
useSpecTranslation=false,unit=LengthUnit::CENTIMETER,epsilon=1e-6f) all match C++ declarations- Documentation macros properly indexed for overloaded methods
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/utility/matrixOps.cpp (1)
353-368:⚠️ Potential issue | 🔴 CriticalDivision by zero when rotation angle is near 180°.
The
matrixToVectorfunction has a potential division by zero at line 365. When the rotation angle approaches π (180°),sin(angle)approaches 0, makingsin_angle(computed from the skew-symmetric part) also approach 0. This causesk = 1.0f / (2.0f * sin_angle)to produce infinity or undefined behavior.Example: For a 180° rotation around the x-axis with R = [[1,0,0],[0,-1,0],[0,0,-1]]:
- rx = ry = rz = 0
- sin_angle = 0
- k = 1/(2×0) → division by zero
The standard solution is to handle the near-π case separately by extracting the axis from the diagonal elements.
🔧 Proposed fix
if(std::fabs(angle) < 1e-6f) { // Angle is ~0 → zero rotation vector return {0.0f, 0.0f, 0.0f}; } float rx = R[2][1] - R[1][2]; float ry = R[0][2] - R[2][0]; float rz = R[1][0] - R[0][1]; float sin_angle = std::sqrt(rx * rx + ry * ry + rz * rz) * 0.5f; + // Handle angle near π (180°) where sin_angle ≈ 0 + if(sin_angle < 1e-6f) { + // Extract axis from diagonal: axis_i = sqrt((R[i][i] + 1) / 2) + float xx = (R[0][0] + 1.0f) * 0.5f; + float yy = (R[1][1] + 1.0f) * 0.5f; + float zz = (R[2][2] + 1.0f) * 0.5f; + + x = std::sqrt(std::fmax(0.0f, xx)); + y = std::sqrt(std::fmax(0.0f, yy)); + z = std::sqrt(std::fmax(0.0f, zz)); + + // Determine signs from off-diagonal elements + if(R[0][1] + R[1][0] < 0) y = -y; + if(R[0][2] + R[2][0] < 0) z = -z; + + return {x * angle, y * angle, z * angle}; + } + // Normalize axis float k = 1.0f / (2.0f * sin_angle);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/utility/matrixOps.cpp` around lines 353 - 368, In matrixToVector, avoid dividing by (2*sin_angle) when sin_angle is ~0 (near 180°); detect the near-pi case (e.g., fabs(angle - M_PI) < epsilon or sin_angle < small_threshold) and handle it separately: instead of computing k = 1.0f/(2.0f*sin_angle) from rx,ry,rz, extract the rotation axis from the diagonal elements using axis_i = sqrt(max(0, (R[i][i] + 1)/2)) and recover the correct signs from the off-diagonal terms (R[1][2]-R[2][1], etc.) or choose the largest diagonal to avoid numerical instability, then set x,y,z = axis * angle; otherwise keep the existing branch that uses rx,ry,rz, sin_angle, and k. Ensure you reference rx, ry, rz, sin_angle, k and the rotation matrix R in your changes.
♻️ Duplicate comments (2)
include/depthai/common/Extrinsics.hpp (1)
125-134:⚠️ Potential issue | 🔴 CriticalThe
std::arraysetter still corrupts non-default-unit translations.This overload rescales the incoming translation and then immediately relabels it with
unit, so the stored numeric value no longer matches the stored metadata. The vector overload above was fixed to store the caller's values verbatim; this path should behave the same. It also no longer guards the last row like the vector overload does.🔧 Suggested fix
void setTransformationMatrix(const std::array<std::array<float, 4>, 4>& matrix, LengthUnit unit = LengthUnit::CENTIMETER) { + if(matrix[3][0] != 0.0f || matrix[3][1] != 0.0f || matrix[3][2] != 0.0f || matrix[3][3] != 1.0f) { + throw std::runtime_error("Extrinsics transformation matrix must have last row [0 0 0 1]."); + } rotationMatrix = std::vector<std::vector<float>>(3, std::vector<float>(3, 0.0f)); for(size_t i = 0; i < 3; ++i) { for(size_t j = 0; j < 3; ++j) { rotationMatrix[i][j] = matrix[i][j]; } } - const float scale = getDistanceUnitScale(unit, lengthUnit); - translation = Point3f(matrix[0][3] * scale, matrix[1][3] * scale, matrix[2][3] * scale); + translation = Point3f(matrix[0][3], matrix[1][3], matrix[2][3]); lengthUnit = unit; }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@include/depthai/common/Extrinsics.hpp` around lines 125 - 134, The setTransformationMatrix overload incorrectly rescales and then relabels the translation causing stored numeric values to mismatch lengthUnit; change it to copy the incoming translation values verbatim (like the vector overload) without applying getDistanceUnitScale, set lengthUnit to the caller's unit, and ensure the last row of the input matrix (matrix[3][*]) is validated/ignored the same way as the vector overload; update rotationMatrix assignment to remain the same and only apply scaling logic if you intend to convert units—here, copy matrix[0..2][3] directly into translation (Point3f) and set lengthUnit = unit.bindings/python/src/pipeline/CommonBindings.cpp (1)
3-3: 🧹 Nitpick | 🔵 TrivialDrop the direct include of pybind11 internals.
Nothing in this file appears to use
py::detailor opaque-container macros, sopybind11/pybind11.hshould be enough. Keepingdetail/common.hties the bindings to a non-public header.Run this to confirm the include is unused in this translation unit:
#!/bin/bash set -euo pipefail sed -n '1,12p' bindings/python/src/pipeline/CommonBindings.cpp rg -n "py::detail|detail::|PYBIND11_MAKE_OPAQUE" bindings/python/src/pipeline/CommonBindings.cpp || trueExpected result: the internal header is included, but there are no internal pybind11 symbols/macros referenced in the file.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@bindings/python/src/pipeline/CommonBindings.cpp` at line 3, The file currently includes the internal header <pybind11/detail/common.h>; replace that with the public header <pybind11/pybind11.h> and remove the direct include of the detail header (no code in this TU references py::detail, detail::, or PYBIND11_MAKE_OPAQUE). Update the include line to use the public pybind11 header, run the provided grep check (search for "py::detail", "detail::", and "PYBIND11_MAKE_OPAQUE") to verify there are no internal-symbol usages, and ensure the build/tests pass after the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@include/depthai/common/Extrinsics.hpp`:
- Around line 156-168: isEqualExtrinsics currently only compares rotationMatrix
and translation vector, so two Extrinsics with different toCameraSocket or
specTranslation can be treated equal; update isEqualExtrinsics to also compare
the toCameraSocket member and the specTranslation member (use exact equality for
discrete fields like toCameraSocket and either exact or element-wise float
comparison for specTranslation using the same epsilon) so that extrinsics that
differ in reference frame or specialization do not collapse to equal; locate the
method isEqualExtrinsics in class Extrinsics and add comparisons for
toCameraSocket and specTranslation (and specRotation if applicable) after the
rotation/translation checks.
In `@src/device/CalibrationHandler.cpp`:
- Around line 558-566: The current getExtrinsicsToLowestSocket synthesizes an
identity Extrinsics for the lowest socket even when calibration isn't available;
change it to consult hasCameraCalibration() before returning identity so
behavior matches the rest of the API: in getExtrinsicsToLowestSocket (and
specifically in the branch where cameraId == getCameraWithLowestId()), call
hasCameraCalibration() and if it returns false, throw the same
std::runtime_error used when eepromData.cameraData is missing (or otherwise
return the calibration-not-available failure) instead of producing identity
extrinsics; keep use of eepromData.cameraData, getCameraWithLowestId, and the
Extrinsics construction otherwise.
In `@src/pipeline/utilities/Alignment/AlignmentUtilities.cpp`:
- Around line 61-63: The helpers operate on homogeneous std::array<float,3>
points but currently ignore point[2], making results scale-dependent; for
distortPerspective (and the other helpers at the same file locations)
dehomogenize the input once at the start by computing float w =
std::max(point[2], kTiny) and then float x = point[0]/w, y = point[1]/w before
any r/theta/tilt computation, using the dehomogenized x/y for all subsequent
math so {x,y,1} and {2x,2y,2} produce identical results; ensure you reference
point[2] and apply the same guard in each helper listed (lines ~107-110,
127-128, 173-175, 215-218, 248-249).
- Around line 368-370: In opencvDistortRay, guard against
division-by-zero/near-zero when normalizing homogeneous coordinates: add a small
epsilon (e.g., kTiny) and early-bail if std::abs(ray[2]) < kTiny before
computing normalizedSrc from ray; likewise, before every homogeneous divide
where you use distorted[2] or projectedHomogeneous[2] (the fallback path around
distorted/projectedHomogeneous usage), check std::abs(value) >= kTiny and handle
the non-projectable case (return a safe default dai::Point2f or skip distortion)
to avoid producing inf/NaN pixels; update all divides in this function (ray[2],
distorted[2], projectedHomogeneous[2]) to use the same epsilon check and
consistent bailout behavior.
- Around line 253-264: The iterative loop in undistortRadialDivision() can
produce non-finite scale/x/y (and then inf/NaN in undistorted) when the radial
terms overflow; add finite checks like the forward radial-division singularity
guard: after computing scale, x, y verify std::isfinite(scale) &&
std::isfinite(x) && std::isfinite(y) (and include <cmath> if needed) and if any
are non-finite bail out by restoring undistorted to the original point (or
another safe fallback used by the forward path) and break the loop; also verify
undistorted[0]/undistorted[1] remain finite after the update and break/revert if
not.
In `@src/utility/matrixOps.cpp`:
- Around line 20-27: The inner loop in the matrix-vector multiply uses
matrix[0].size() for its bound but the function validates each row against
vec.size(); change the inner loop bound to use vec.size() instead (i.e., update
the loop that iterates with index j in the function that fills res[i] from
matrix[i][j] * vec[j]) so it consistently relies on the validated vector size
and avoids depending on matrix[0]; keep the existing validation that throws
std::runtime_error when a row size doesn't match vec.size().
In `@tests/src/ondevice_tests/img_transformation_test.cpp`:
- Around line 180-186: The loop over referencePoints fails to skip zero depths
before calling ImgTransformation::projectPointTo, which rejects depth <= 0;
update the guard in the loop that currently checks "p.depthMm < 0.0f" to instead
skip when depth is non-positive (e.g. check p.depthMm.has_value() and
p.depthMm.value() <= 0.0f or use <= 0.0f) so that
refTransform.projectPointTo(targetTransform, p.coordinates, p.depthMm.value())
is only called for strictly positive depths; ensure projectedPoints.push_back
remains unchanged for valid positives.
---
Outside diff comments:
In `@src/utility/matrixOps.cpp`:
- Around line 353-368: In matrixToVector, avoid dividing by (2*sin_angle) when
sin_angle is ~0 (near 180°); detect the near-pi case (e.g., fabs(angle - M_PI) <
epsilon or sin_angle < small_threshold) and handle it separately: instead of
computing k = 1.0f/(2.0f*sin_angle) from rx,ry,rz, extract the rotation axis
from the diagonal elements using axis_i = sqrt(max(0, (R[i][i] + 1)/2)) and
recover the correct signs from the off-diagonal terms (R[1][2]-R[2][1], etc.) or
choose the largest diagonal to avoid numerical instability, then set x,y,z =
axis * angle; otherwise keep the existing branch that uses rx,ry,rz, sin_angle,
and k. Ensure you reference rx, ry, rz, sin_angle, k and the rotation matrix R
in your changes.
---
Duplicate comments:
In `@bindings/python/src/pipeline/CommonBindings.cpp`:
- Line 3: The file currently includes the internal header
<pybind11/detail/common.h>; replace that with the public header
<pybind11/pybind11.h> and remove the direct include of the detail header (no
code in this TU references py::detail, detail::, or PYBIND11_MAKE_OPAQUE).
Update the include line to use the public pybind11 header, run the provided grep
check (search for "py::detail", "detail::", and "PYBIND11_MAKE_OPAQUE") to
verify there are no internal-symbol usages, and ensure the build/tests pass
after the change.
In `@include/depthai/common/Extrinsics.hpp`:
- Around line 125-134: The setTransformationMatrix overload incorrectly rescales
and then relabels the translation causing stored numeric values to mismatch
lengthUnit; change it to copy the incoming translation values verbatim (like the
vector overload) without applying getDistanceUnitScale, set lengthUnit to the
caller's unit, and ensure the last row of the input matrix (matrix[3][*]) is
validated/ignored the same way as the vector overload; update rotationMatrix
assignment to remain the same and only apply scaling logic if you intend to
convert units—here, copy matrix[0..2][3] directly into translation (Point3f) and
set lengthUnit = unit.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: a1cdc7fd-f2d8-461b-98f1-6e955e826442
📒 Files selected for processing (9)
bindings/python/src/pipeline/CommonBindings.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hppinclude/depthai/utility/matrixOps.hppsrc/device/CalibrationHandler.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/utility/matrixOps.cpptests/CMakeLists.txttests/src/ondevice_tests/img_transformation_test.cpp
📜 Review details
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2026-03-23T09:35:30.339Z
Learnt from: aljazkonec1
Repo: luxonis/depthai-core PR: 1728
File: protos/common.proto:20-25
Timestamp: 2026-03-23T09:35:30.339Z
Learning: In the depthai-core repository (luxonis/depthai-core), the `LengthUnit` and `CameraBoardSocket` enums (defined in both C++ headers and `protos/common.proto`) are already released as public API and must not have their existing enumerator values changed or have new zero-value "UNSPECIFIED" entries prepended, as that would break existing user code and serialized data.
Applied to files:
tests/CMakeLists.txttests/src/ondevice_tests/img_transformation_test.cppsrc/device/CalibrationHandler.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppinclude/depthai/common/Extrinsics.hppsrc/utility/matrixOps.cppinclude/depthai/utility/matrixOps.hpp
📚 Learning: 2026-03-16T11:17:12.819Z
Learnt from: pheec
Repo: luxonis/depthai-core PR: 1715
File: include/depthai/pipeline/node/PointCloud.hpp:34-98
Timestamp: 2026-03-16T11:17:12.819Z
Learning: In `include/depthai/pipeline/node/PointCloud.hpp`, the nested `Impl` class inside `PointCloud` is intentionally public (not private/forward-declared) because the on-host unit tests in `tests/src/onhost_tests/point_cloud_test.cpp` directly access `Impl` methods such as `setIntrinsics`, `setExtrinsics`, `useCPU`, `useCPUMT`, `computePointCloudDense`, `applyTransformation`, and `filterValidPoints`. Do not suggest making `Impl` private or forward-declaring it.
Applied to files:
tests/src/ondevice_tests/img_transformation_test.cppinclude/depthai/utility/matrixOps.hpp
📚 Learning: 2026-03-13T19:40:56.303Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: src/pipeline/node/AutoCalibration.cpp:327-330
Timestamp: 2026-03-13T19:40:56.303Z
Learning: In `src/pipeline/node/AutoCalibration.cpp`, the hard-coded 1280x800 resolution check in `AutoCalibration::validateIncomingData()` is intentional. The AutoCalibration node in the depthai-core (C++) project is designed to support only 1280x800 sensor resolution and this constraint should not be flagged as a usability issue in future reviews.
Applied to files:
tests/src/ondevice_tests/img_transformation_test.cppsrc/device/CalibrationHandler.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hpp
📚 Learning: 2026-03-17T08:07:19.141Z
Learnt from: JakubFara
Repo: luxonis/depthai-core PR: 1718
File: src/pipeline/node/AutoCalibration.cpp:167-216
Timestamp: 2026-03-17T08:07:19.141Z
Learning: In `src/pipeline/node/AutoCalibration.cpp`, the `getNewCalibration` method intentionally opens the gate once before the outer recalibration retry loop and closes it only at the end (or on success). There is no need to isolate gate state between individual recalibration attempts — this single open/close pattern is by design and should not be flagged as a bug in future reviews.
Applied to files:
tests/src/ondevice_tests/img_transformation_test.cppsrc/device/CalibrationHandler.cpp
📚 Learning: 2026-03-16T23:22:52.039Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: examples/python/AutoCalibration/auto_calibration_example.py:99-106
Timestamp: 2026-03-16T23:22:52.039Z
Learning: In `examples/python/AutoCalibration/auto_calibration_example.py`, no shape validation guard is needed before slicing the result of `calibrationHandler.getCameraExtrinsics()`, as the API is guaranteed to return a valid matrix. Do not flag this as an issue in future reviews.
Applied to files:
tests/src/ondevice_tests/img_transformation_test.cppsrc/device/CalibrationHandler.cppbindings/python/src/pipeline/datatype/ImgFrameBindings.cppinclude/depthai/common/Extrinsics.hpp
🧬 Code graph analysis (5)
src/device/CalibrationHandler.cpp (1)
include/depthai/device/CalibrationHandler.hpp (16)
cameraId(93-93)cameraId(117-122)cameraId(145-149)cameraId(172-176)cameraId(192-192)cameraId(203-203)cameraId(212-212)cameraId(220-220)cameraId(228-228)cameraId(361-363)cameraId(384-386)cameraId(538-538)cameraId(556-556)cameraId(573-573)cameraId(581-581)cameraId(589-589)
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp (2)
include/depthai/common/ImgTransformations.hpp (18)
ImgTransformation(42-42)ImgTransformation(43-43)ImgTransformation(44-45)ImgTransformation(46-49)ImgTransformation(50-63)ImgTransformation(65-80)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)point(87-87)point(99-99)point(294-294)include/depthai/common/Extrinsics.hpp (2)
to(178-198)to(178-180)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp (3)
include/depthai/utility/matrixOps.hpp (5)
matMul(15-15)matMul(16-16)matMul(17-17)matVecMul(19-19)matVecMul(20-20)src/utility/matrixOps.cpp (12)
matMul(81-93)matMul(81-81)matMul(95-107)matMul(95-95)matMul(109-156)matMul(109-109)matVecMul(11-29)matVecMul(11-11)matVecMul(31-39)matVecMul(31-31)matVecMul(41-49)matVecMul(41-41)src/pipeline/utilities/Alignment/AlignmentUtilities.hpp (11)
coeffAt(105-105)applyTilt(52-52)hasNonZeroDistortion(100-100)distortPerspective(37-37)distortFisheye(42-42)distortRadialDivision(47-47)undistortPerspective(70-70)undistortFisheye(75-75)undistortRadialDivision(80-80)undistortPoint(85-85)distortPoint(57-57)
include/depthai/common/Extrinsics.hpp (4)
include/depthai/common/DepthUnit.hpp (2)
getDistanceUnitScale(57-59)getDistanceUnitScale(57-57)include/depthai/utility/matrixOps.hpp (11)
vectorMatrixToMatrix3x3(43-43)getMatrixInverse(27-27)getMatrixInverse(28-28)createTransformationMatrix(33-33)createTransformationMatrix(34-34)invertSe3Matrix4x4(49-49)mateq(22-22)mateq(23-23)matMul(15-15)matMul(16-16)matMul(17-17)src/utility/matrixOps.cpp (22)
vectorMatrixToMatrix3x3(385-397)vectorMatrixToMatrix3x3(385-385)getMatrixInverse(446-452)getMatrixInverse(446-446)getMatrixInverse(454-492)getMatrixInverse(454-454)createTransformationMatrix(289-300)createTransformationMatrix(289-289)createTransformationMatrix(302-304)createTransformationMatrix(302-302)invertSe3Matrix4x4(532-553)invertSe3Matrix4x4(532-532)mateq(51-70)mateq(51-51)mateq(72-79)mateq(72-72)matMul(81-93)matMul(81-81)matMul(95-107)matMul(95-95)matMul(109-156)matMul(109-109)include/depthai/common/ImgTransformations.hpp (10)
matrix(213-213)to(265-265)to(279-279)to(303-303)to(312-312)to(329-329)to(345-347)to(353-353)to(359-361)to(367-367)
src/utility/matrixOps.cpp (3)
include/depthai/common/Extrinsics.hpp (4)
matrix(98-113)matrix(98-98)matrix(125-135)matrix(125-125)include/depthai/common/ImgTransformations.hpp (5)
matrix(213-213)transformationMatrix(161-163)point(87-87)point(99-99)point(294-294)include/depthai/utility/matrixOps.hpp (5)
matVecMul(19-19)matVecMul(20-20)dehomogenizePoint4(36-36)matrixToVector(39-39)matrix3x3ToVectorMatrix(42-42)
🪛 Cppcheck (2.20.0)
tests/src/ondevice_tests/img_transformation_test.cpp
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingInclude)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingInclude)
[information] 18-18: Include file
(missingInclude)
[information] 19-19: Include file
(missingInclude)
[information] 20-20: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 22-22: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 25-25: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[error] 200-200: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
src/device/CalibrationHandler.cpp
[information] 1-1: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingInclude)
bindings/python/src/pipeline/CommonBindings.cpp
[information] 4-4: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
bindings/python/src/pipeline/datatype/ImgFrameBindings.cpp
[error] 200-200: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[error] 200-200: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 40-40: Include file
(missingIncludeSystem)
[information] 43-43: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
src/utility/matrixOps.cpp
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is a macro then please configure it.
(unknownMacro)
🔇 Additional comments (10)
tests/CMakeLists.txt (1)
652-658: Nice fix:img_transformation_testnow stays built without artifacts.This preserves the older non-dataset coverage in every configuration while still cleanly disabling the dataset path with an empty
TRANSFORMATION_TEST_DATA.src/utility/matrixOps.cpp (9)
31-49: LGTM!The fixed-size
matVecMuloverloads are correctly implemented with proper initialization and standard matrix-vector multiplication logic.
51-79: LGTM!The
mateqfunctions now properly handle ragged matrices by validating consistent column counts, and use epsilon-based comparison as previously suggested.
81-107: LGTM!The fixed-size
matMuloverloads implement correct matrix multiplication with proper zero-initialization.
109-156: LGTM!The dynamic
matMulfunction has comprehensive input validation including empty checks, rectangular consistency, and inner dimension compatibility.
273-310: LGTM!The transformation matrix creation functions correctly construct 4x4 homogeneous SE(3) transforms, and
transformPoint3fproperly handles homogeneous coordinates.
312-324: LGTM!The dehomogenization functions correctly guard against division by near-zero values with appropriate threshold checks.
373-402: LGTM!The matrix conversion utilities are straightforward and include proper validation for the vector-to-array conversion.
404-409: LGTM!The function correctly extracts the 3x3 rotation submatrix from a 4x4 homogeneous transformation matrix.
532-553: LGTM!The
invertSe3Matrix4x4function correctly implements SE(3) inversion using R^T for rotation and -R^T * t for translation, with proper zero-initialization ensuring the bottom row is [0, 0, 0, 1].
moratom
left a comment
There was a problem hiding this comment.
/**
* Remap a point from the current frame to the source frame
* @param point point to remap
* @returns remapped point
*/
Point2f remapPointFromSource(const Point2f& point) const;
/**
* Remap a point from the source frame to the current frame
* @param point point to remap
* @returns remapped point
*/
Point2f remapPointToSource(const Point2f& point) const;
/**
* Remap a rectangle from the source frame to the current frame
*
* @param rect rectangle to remap
* @returns remapped rectangle
*/
Rect remapRectFromSource(const Rect& rect) const;
I think we should take care of undistortion here as well and document clearly that source frame is considered undistorted, target frame is considered distorted (and handled if distortion coeffients are 0)
There was a problem hiding this comment.
Actionable comments posted: 4
♻️ Duplicate comments (4)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp (2)
371-403:⚠️ Potential issue | 🟠 MajorGuard every homogeneous divide in
opencvDistortRay().The fisheye branch only normalizes when
ray[2] >= kTiny, and the fallback branch still divides bydistorted[2]andprojectedHomogeneous[2]unconditionally. Rays withz <= 0or|z| << 1still produce inf/NaN pixels here.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/pipeline/utilities/Alignment/AlignmentUtilities.cpp` around lines 371 - 403, In opencvDistortRay, guard every homogeneous division: before dividing by ray[2], distorted[2], or projectedHomogeneous[2] (and any other denominator used for normalization) check against kTiny (or fabs(denom) < kTiny) and handle the unsafe case (e.g., return a safe default projected coordinate, clamp denominator to sign(kTiny), or skip normalization) to avoid inf/NaN; update the fisheye branch, the RadialDivision/Equirectangular fallback where distortedHomogeneous and projectedHomogeneous are computed, and the final fallback that returns {ray[0]/ray[2], ray[1]/ray[2]} so every divide uses a guarded denominator.
272-286:⚠️ Potential issue | 🟠 MajorDehomogenize before
undistortPoint()dispatches to a model.
distortPoint()already normalizes{x, y, w}first, but this path still feeds raw homogeneous coordinates into the per-model math. The same ray therefore undistorts differently depending on scale.Suggested fix
std::array<float, 3> undistortPoint(std::array<float, 3> point, dai::CameraModel model, const std::vector<float>& coeffs) { if(coeffs.empty() || !hasNonZeroDistortion(coeffs)) return point; + const auto normalizedPoint = dai::matrix::dehomogenizePoint3(point); switch(model) { case dai::CameraModel::Perspective: - return undistortPerspective(point, coeffs); + return undistortPerspective(normalizedPoint, coeffs); case dai::CameraModel::Fisheye: - return undistortFisheye(point, coeffs); + return undistortFisheye(normalizedPoint, coeffs); case dai::CameraModel::RadialDivision: { - const auto undistorted = undistortRadialDivision(point, coeffs); + const auto undistorted = undistortRadialDivision(normalizedPoint, coeffs); return undistorted; } case dai::CameraModel::Equirectangular: default: - return point; + return normalizedPoint; } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/pipeline/utilities/Alignment/AlignmentUtilities.cpp` around lines 272 - 286, undistortPoint is feeding raw homogeneous {x,y,w} into per-model undistort functions causing scale-dependent results; dehomogenize the input point first (divide x and y by w, handle w==0 safely by returning point or treating as is, and set w=1) before the switch and then call undistortPerspective, undistortFisheye, or undistortRadialDivision; after the model-specific undistortion, re-homogenize if your callers expect a homogeneous coordinate. Ensure you update undistortPoint (and keep compatible behavior with distortPoint) so all model paths use normalized coordinates.include/depthai/common/Extrinsics.hpp (2)
156-173:⚠️ Potential issue | 🟠 Major
isEqualExtrinsics()still ignoresspecTranslation.Two extrinsics with different spec baselines compare equal here, so
ImgTransformation::isEqualTransformation()can collapse transformations that diverge whenuseSpecTranslation=true.Suggested fix
const auto thisTranslation = getTranslationVector(false, LengthUnit::CENTIMETER); const auto otherTranslation = other.getTranslationVector(false, LengthUnit::CENTIMETER); for(size_t i = 0; i < 3; ++i) { if(std::abs(thisTranslation[i] - otherTranslation[i]) > epsilon) { return false; } } + + const auto thisSpecTranslation = getTranslationVector(true, LengthUnit::CENTIMETER); + const auto otherSpecTranslation = other.getTranslationVector(true, LengthUnit::CENTIMETER); + for(size_t i = 0; i < 3; ++i) { + if(std::abs(thisSpecTranslation[i] - otherSpecTranslation[i]) > epsilon) { + return false; + } + } return true; }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@include/depthai/common/Extrinsics.hpp` around lines 156 - 173, isEqualExtrinsics currently ignores the specTranslation flag/vector so two Extrinsics with different spec baselines can compare equal; update isEqualExtrinsics to first compare the specTranslation flag(s) and, when specTranslation is true for either object, compare the spec translation vectors (use getTranslationVector(true, LengthUnit::CENTIMETER) or equivalent) with the same epsilon tolerance, in addition to the existing rotationMatrix, toCameraSocket, and standard translation comparisons; refer to isEqualExtrinsics, specTranslation (flag), getTranslationVector, rotationMatrix, and toCameraSocket to locate and implement these checks.
125-134:⚠️ Potential issue | 🔴 CriticalDon't rescale the array overload before updating
lengthUnit.This setter still multiplies by
getDistanceUnitScale(unit, lengthUnit)and then storeslengthUnit = unit, so any non-default-unit input is numerically corrupted. Thestd::vectoroverload just above already has the correct semantics.Suggested fix
- const float scale = getDistanceUnitScale(unit, lengthUnit); - translation = Point3f(matrix[0][3] * scale, matrix[1][3] * scale, matrix[2][3] * scale); + translation = Point3f(matrix[0][3], matrix[1][3], matrix[2][3]); lengthUnit = unit;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@include/depthai/common/Extrinsics.hpp` around lines 125 - 134, The array overload of setTransformationMatrix is incorrectly scaling the translation using getDistanceUnitScale(unit, lengthUnit) before updating lengthUnit, corrupting non-default-unit inputs; change it to avoid rescaling: assign rotationMatrix from matrix as currently done, set translation directly from matrix[0][3], matrix[1][3], matrix[2][3] (no scale), then set lengthUnit = unit so the stored translation and lengthUnit match the input, mirroring the semantics of the std::vector overload; refer to setTransformationMatrix, rotationMatrix, translation, lengthUnit, and getDistanceUnitScale to locate and modify the code.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/device/CalibrationHandler.cpp`:
- Around line 589-599: getCameraWithLowestId currently initializes
currentCameraId to dai::CameraBoardSocket::CAM_J which returns a bogus socket
for empty eepromData and assumes CAM_J is the numeric maximum; instead, check if
eepromData.cameraData is empty and if not initialize currentCameraId from the
first entry in eepromData.cameraData (e.g., cameraData.begin()->first) then
iterate remaining entries comparing static_cast<int>(...) to find the minimum;
ensure you handle the empty case (return a sensible default or indicate absence)
and update the function getCameraWithLowestId accordingly.
In `@src/pipeline/datatype/ImgTransformations.cpp`:
- Around line 452-458: The 3D reprojection helpers remap3DPointTo and
remap3DPointFrom build source3dPoint using depth converted by projectPointTo
(which divides by 10 for cm) but call getExtrinsicsTransformationMatrixTo()
without the extrinsics length unit, causing unit mismatch; fix both
remap3DPointTo and remap3DPointFrom to pass the extrinsics.lengthUnit (or the
appropriate unit value from the extrinsics object) into
getExtrinsicsTransformationMatrixTo(to, extrinsics.lengthUnit) so the returned
transformation uses the same unit as the constructed source3dPoint (and verify
any other calls to getExtrinsicsTransformationMatrixTo in these functions—e.g.,
the second block around lines 492–509—are updated similarly).
In `@src/pipeline/node/Rectification.cpp`:
- Around line 123-129: The code currently copies the original source size from
inputImgTransformation into outputImgTransformation, which pairs the new
rectified intrinsic matrix with stale dimensions; change the call to
setSourceSize so the source size is reset to the rectified image dimensions (use
the rectified/output dimensions—i.e., outputWidth and outputHeight or the value
returned by outputImgTransformation.getSize()) instead of
inputImgTransformation.getSourceSize(), while keeping the updated intrinsic
matrix (setIntrinsicMatrix(cvIntrinsicMatrix)), extrinsics, and cleared
distortion (setDistortionCoefficients({})).
In `@src/utility/matrixOps.cpp`:
- Around line 51-69: mateq currently dereferences A[0] and throws on shape
mismatches; fix it so empty matrices are treated as equal and shape mismatches
return false instead of throwing. In mateq(const
std::vector<std::vector<float>>& A, const std::vector<std::vector<float>>& B,
float epsilon) first handle trivial cases: if both A and B are empty return
true, if A.size() != B.size() return false; then for each row ensure A[i].size()
== B[i].size() and that all rows in A have the same column count (return false
on any mismatch) before indexing columns; this prevents crashes when
Extrinsics.rotationMatrix is default-empty and when
ImgTransformation::isEqualTransformation()/Extrinsics::isEqualExtrinsics() call
mateq.
---
Duplicate comments:
In `@include/depthai/common/Extrinsics.hpp`:
- Around line 156-173: isEqualExtrinsics currently ignores the specTranslation
flag/vector so two Extrinsics with different spec baselines can compare equal;
update isEqualExtrinsics to first compare the specTranslation flag(s) and, when
specTranslation is true for either object, compare the spec translation vectors
(use getTranslationVector(true, LengthUnit::CENTIMETER) or equivalent) with the
same epsilon tolerance, in addition to the existing rotationMatrix,
toCameraSocket, and standard translation comparisons; refer to
isEqualExtrinsics, specTranslation (flag), getTranslationVector, rotationMatrix,
and toCameraSocket to locate and implement these checks.
- Around line 125-134: The array overload of setTransformationMatrix is
incorrectly scaling the translation using getDistanceUnitScale(unit, lengthUnit)
before updating lengthUnit, corrupting non-default-unit inputs; change it to
avoid rescaling: assign rotationMatrix from matrix as currently done, set
translation directly from matrix[0][3], matrix[1][3], matrix[2][3] (no scale),
then set lengthUnit = unit so the stored translation and lengthUnit match the
input, mirroring the semantics of the std::vector overload; refer to
setTransformationMatrix, rotationMatrix, translation, lengthUnit, and
getDistanceUnitScale to locate and modify the code.
In `@src/pipeline/utilities/Alignment/AlignmentUtilities.cpp`:
- Around line 371-403: In opencvDistortRay, guard every homogeneous division:
before dividing by ray[2], distorted[2], or projectedHomogeneous[2] (and any
other denominator used for normalization) check against kTiny (or fabs(denom) <
kTiny) and handle the unsafe case (e.g., return a safe default projected
coordinate, clamp denominator to sign(kTiny), or skip normalization) to avoid
inf/NaN; update the fisheye branch, the RadialDivision/Equirectangular fallback
where distortedHomogeneous and projectedHomogeneous are computed, and the final
fallback that returns {ray[0]/ray[2], ray[1]/ray[2]} so every divide uses a
guarded denominator.
- Around line 272-286: undistortPoint is feeding raw homogeneous {x,y,w} into
per-model undistort functions causing scale-dependent results; dehomogenize the
input point first (divide x and y by w, handle w==0 safely by returning point or
treating as is, and set w=1) before the switch and then call
undistortPerspective, undistortFisheye, or undistortRadialDivision; after the
model-specific undistortion, re-homogenize if your callers expect a homogeneous
coordinate. Ensure you update undistortPoint (and keep compatible behavior with
distortPoint) so all model paths use normalized coordinates.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: e4b98d2f-f4e1-4444-bdbc-44780675196e
📒 Files selected for processing (7)
include/depthai/common/Extrinsics.hppinclude/depthai/utility/matrixOps.hppsrc/device/CalibrationHandler.cppsrc/pipeline/datatype/ImgTransformations.cppsrc/pipeline/node/Rectification.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/utility/matrixOps.cpp
📜 Review details
🧰 Additional context used
🧠 Learnings (8)
📚 Learning: 2026-03-16T11:17:12.819Z
Learnt from: pheec
Repo: luxonis/depthai-core PR: 1715
File: include/depthai/pipeline/node/PointCloud.hpp:34-98
Timestamp: 2026-03-16T11:17:12.819Z
Learning: In `include/depthai/pipeline/node/PointCloud.hpp`, the nested `Impl` class inside `PointCloud` is intentionally public (not private/forward-declared) because the on-host unit tests in `tests/src/onhost_tests/point_cloud_test.cpp` directly access `Impl` methods such as `setIntrinsics`, `setExtrinsics`, `useCPU`, `useCPUMT`, `computePointCloudDense`, `applyTransformation`, and `filterValidPoints`. Do not suggest making `Impl` private or forward-declaring it.
Applied to files:
src/pipeline/node/Rectification.cppsrc/pipeline/datatype/ImgTransformations.cpp
📚 Learning: 2026-03-24T22:39:04.364Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1732
File: src/pipeline/Pipeline.cpp:705-705
Timestamp: 2026-03-24T22:39:04.364Z
Learning: Do not flag the `!= ""` part of the auto-calibration condition as redundant when it appears in `PipelineImpl::build()` (or closely related pipeline build logic). If the code uses `utility::getEnvAs<std::string>(..., default)` with a default such as `"ON_START"`, the explicit empty-string guard may still be intentional to treat an explicitly empty env var as “OFF/disabled” (or to avoid special-casing elsewhere). Only consider removing `!= ""` if the codebase has an explicit, enforceable guarantee that `DEPTHAI_AUTOCALIBRATION` can never be set to an empty string (e.g., via validated parsing/CI checks); otherwise, keep the guard.
Applied to files:
src/pipeline/node/Rectification.cppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/pipeline/datatype/ImgTransformations.cpp
📚 Learning: 2026-03-16T23:22:52.039Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: examples/python/AutoCalibration/auto_calibration_example.py:99-106
Timestamp: 2026-03-16T23:22:52.039Z
Learning: In `examples/python/AutoCalibration/auto_calibration_example.py`, no shape validation guard is needed before slicing the result of `calibrationHandler.getCameraExtrinsics()`, as the API is guaranteed to return a valid matrix. Do not flag this as an issue in future reviews.
Applied to files:
src/device/CalibrationHandler.cppinclude/depthai/common/Extrinsics.hppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/pipeline/datatype/ImgTransformations.cpp
📚 Learning: 2026-03-13T19:40:56.303Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1718
File: src/pipeline/node/AutoCalibration.cpp:327-330
Timestamp: 2026-03-13T19:40:56.303Z
Learning: In `src/pipeline/node/AutoCalibration.cpp`, the hard-coded 1280x800 resolution check in `AutoCalibration::validateIncomingData()` is intentional. The AutoCalibration node in the depthai-core (C++) project is designed to support only 1280x800 sensor resolution and this constraint should not be flagged as a usability issue in future reviews.
Applied to files:
src/device/CalibrationHandler.cppinclude/depthai/common/Extrinsics.hppsrc/pipeline/datatype/ImgTransformations.cpp
📚 Learning: 2026-03-24T22:38:54.335Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1732
File: src/pipeline/Pipeline.cpp:662-662
Timestamp: 2026-03-24T22:38:54.335Z
Learning: In `src/pipeline/Pipeline.cpp`, the `DEPTHAI_AUTOCALIBRATION` environment variable intentionally defaults to `"ON_START"` (not `""`). This means auto-calibration is initialized by default for stereo pipelines at pipeline build time. The resulting implicit EEPROM/calibration writes on startup are by design and should not be flagged as a backward-incompatible change or unintended side-effect in future reviews.
Applied to files:
src/device/CalibrationHandler.cpp
📚 Learning: 2026-03-17T08:07:19.141Z
Learnt from: JakubFara
Repo: luxonis/depthai-core PR: 1718
File: src/pipeline/node/AutoCalibration.cpp:167-216
Timestamp: 2026-03-17T08:07:19.141Z
Learning: In `src/pipeline/node/AutoCalibration.cpp`, the `getNewCalibration` method intentionally opens the gate once before the outer recalibration retry loop and closes it only at the end (or on success). There is no need to isolate gate state between individual recalibration attempts — this single open/close pattern is by design and should not be flagged as a bug in future reviews.
Applied to files:
src/device/CalibrationHandler.cpp
📚 Learning: 2026-03-24T22:39:04.364Z
Learnt from: MaticTonin
Repo: luxonis/depthai-core PR: 1732
File: src/pipeline/Pipeline.cpp:705-705
Timestamp: 2026-03-24T22:39:04.364Z
Learning: In `src/pipeline/Pipeline.cpp`, within `PipelineImpl::build()`, the condition `autoCalibrationString != "OFF" && autoCalibrationString != ""` intentionally retains the empty-string check. Even though `utility::getEnvAs<std::string>("DEPTHAI_AUTOCALIBRATION", "ON_START")` provides a default of `"ON_START"`, the explicit `!= ""` guard is kept on purpose and should not be flagged as redundant in future reviews.
Applied to files:
src/device/CalibrationHandler.cppinclude/depthai/common/Extrinsics.hpp
📚 Learning: 2026-03-23T09:35:30.339Z
Learnt from: aljazkonec1
Repo: luxonis/depthai-core PR: 1728
File: protos/common.proto:20-25
Timestamp: 2026-03-23T09:35:30.339Z
Learning: In the depthai-core repository (luxonis/depthai-core), the `LengthUnit` and `CameraBoardSocket` enums (defined in both C++ headers and `protos/common.proto`) are already released as public API and must not have their existing enumerator values changed or have new zero-value "UNSPECIFIED" entries prepended, as that would break existing user code and serialized data.
Applied to files:
src/device/CalibrationHandler.cppinclude/depthai/common/Extrinsics.hppsrc/pipeline/utilities/Alignment/AlignmentUtilities.cppsrc/pipeline/datatype/ImgTransformations.cppsrc/utility/matrixOps.cppinclude/depthai/utility/matrixOps.hpp
🪛 Cppcheck (2.20.0)
src/pipeline/node/Rectification.cpp
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingInclude)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingInclude)
[information] 8-8: Include file
(missingInclude)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingInclude)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
src/device/CalibrationHandler.cpp
[information] 1-1: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingInclude)
src/pipeline/utilities/Alignment/AlignmentUtilities.cpp
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 2-2: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 17-17: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 4-4: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 3-3: Include file
(missingIncludeSystem)
[error] 205-205: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_INTRUSIVE is a macro then please configure it.
(unknownMacro)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 20-20: Include file
(missingIncludeSystem)
[information] 21-21: Include file
(missingIncludeSystem)
[information] 18-18: Include file
(missingIncludeSystem)
[information] 19-19: Include file
(missingIncludeSystem)
[information] 40-40: Include file
(missingIncludeSystem)
[information] 43-43: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
src/pipeline/datatype/ImgTransformations.cpp
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 10-10: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 15-15: Include file
(missingIncludeSystem)
[information] 16-16: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 9-9: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
src/utility/matrixOps.cpp
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 11-11: Include file
(missingIncludeSystem)
[information] 12-12: Include file
(missingIncludeSystem)
[information] 13-13: Include file
(missingIncludeSystem)
[information] 14-14: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[information] 7-7: Include file
(missingIncludeSystem)
[information] 8-8: Include file
(missingIncludeSystem)
[information] 5-5: Include file
(missingIncludeSystem)
[information] 6-6: Include file
(missingIncludeSystem)
[error] 22-22: There is an unknown macro here somewhere. Configuration is required. If DEPTHAI_NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is a macro then please configure it.
(unknownMacro)
[information] 11-11: Include file
(missingIncludeSystem)
| .def("addSrcCrops", &ImgTransformation::addSrcCrops, py::arg("crops"), DOC(dai, ImgTransformation, addSrcCrops)) | ||
| .def("remapPointTo", &ImgTransformation::remapPointTo, py::arg("to"), py::arg("point"), DOC(dai, ImgTransformation, remapPointTo)) | ||
| .def("remapPointFrom", &ImgTransformation::remapPointFrom, py::arg("to"), py::arg("point"), DOC(dai, ImgTransformation, remapPointFrom)) | ||
| .def("remapPointFrom", &ImgTransformation::remapPointFrom, py::arg("source"), py::arg("point"), DOC(dai, ImgTransformation, remapPointFrom)) |
There was a problem hiding this comment.
This will break any python implementations that specify to. This was a bug as correct arg name is either from.
| .def("remapPointFrom", &ImgTransformation::remapPointFrom, py::arg("source"), py::arg("point"), DOC(dai, ImgTransformation, remapPointFrom)) | ||
| .def("remapRectTo", &ImgTransformation::remapRectTo, py::arg("to"), py::arg("rect"), DOC(dai, ImgTransformation, remapRectTo)) | ||
| .def("remapRectFrom", &ImgTransformation::remapRectFrom, py::arg("to"), py::arg("rect"), DOC(dai, ImgTransformation, remapRectFrom)) | ||
| .def("remapRectFrom", &ImgTransformation::remapRectFrom, py::arg("source"), py::arg("rect"), DOC(dai, ImgTransformation, remapRectFrom)) |
Purpose
This PR adds support for Extrinsics inside dai::ImgTransformations. The following has been added:
Specification
None / not applicable
Dependencies & Potential Impact
None / not applicable
Deployment Plan
None / not applicable
Testing & Validation
New test dataset + extensive video testing.
Summary by CodeRabbit
New Features
Bug Fixes
Tests