From 7e836bde11ce6521953c9f246cacd442a3ef6c0e Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 5 Oct 2020 11:40:22 +0200 Subject: Fix critical lens distortion bug in libmv after rB3a7d62cd1f5e. Current libmv_modal_solver_test fails since rB3a7d62cd1f5e. It appears that the issue is caused by the insertion of the new OFFSET_K4 parameter, as, if camera intrinsics are not required to implement/use all of those deform parameters, they absolutely have to keep order (values) matching those defined in bundle.cc, otherwise `PackIntrinisicsIntoArray` and `UnpackIntrinsicsFromArray` will mangle them around. --- intern/libmv/libmv/simple_pipeline/bundle.cc | 4 ++++ intern/libmv/libmv/simple_pipeline/camera_intrinsics.h | 1 + 2 files changed, 5 insertions(+) diff --git a/intern/libmv/libmv/simple_pipeline/bundle.cc b/intern/libmv/libmv/simple_pipeline/bundle.cc index c055846318a..4e76ae1f473 100644 --- a/intern/libmv/libmv/simple_pipeline/bundle.cc +++ b/intern/libmv/libmv/simple_pipeline/bundle.cc @@ -47,6 +47,10 @@ enum { OFFSET_PRINCIPAL_POINT_Y, // Distortion model coefficients. + // WARNING: camera intrinsics are not required to define/use all of those, + // but they have to define all of them up to the last one they need, in that + // exact same order. See e.g. how `PolynomialCameraIntrinsics` needs to define + // `OFFSET_K4`, even though it does not use it. OFFSET_K1, OFFSET_K2, OFFSET_K3, diff --git a/intern/libmv/libmv/simple_pipeline/camera_intrinsics.h b/intern/libmv/libmv/simple_pipeline/camera_intrinsics.h index cf0bdb76ccb..60ad1b5b8de 100644 --- a/intern/libmv/libmv/simple_pipeline/camera_intrinsics.h +++ b/intern/libmv/libmv/simple_pipeline/camera_intrinsics.h @@ -281,6 +281,7 @@ class PolynomialCameraIntrinsics : public CameraIntrinsics { OFFSET_K1, OFFSET_K2, OFFSET_K3, + OFFSET_K4, // Unused, needed to map properly with all deform parameters defined in bundle.cc. OFFSET_P1, OFFSET_P2, -- cgit v1.2.3