diff --git a/services/camera/libcameraservice/device3/DistortionMapper.cpp b/services/camera/libcameraservice/device3/DistortionMapper.cpp index 4dafefde55..ae7af8e001 100644 --- a/services/camera/libcameraservice/device3/DistortionMapper.cpp +++ b/services/camera/libcameraservice/device3/DistortionMapper.cpp @@ -312,8 +312,8 @@ status_t DistortionMapper::mapRawRectToCorrected(int32_t *rects, int rectCount, int32_t coords[4] = { rects[i], rects[i + 1], - rects[i] + rects[i + 2], - rects[i + 1] + rects[i + 3] + rects[i] + rects[i + 2] - 1, + rects[i + 1] + rects[i + 3] - 1 }; mapRawToCorrected(coords, 2, clamp, simple); @@ -321,8 +321,8 @@ status_t DistortionMapper::mapRawRectToCorrected(int32_t *rects, int rectCount, // Map back to (l, t, width, height) rects[i] = coords[0]; rects[i + 1] = coords[1]; - rects[i + 2] = coords[2] - coords[0]; - rects[i + 3] = coords[3] - coords[1]; + rects[i + 2] = coords[2] - coords[0] + 1; + rects[i + 3] = coords[3] - coords[1] + 1; } return OK; @@ -400,8 +400,8 @@ status_t DistortionMapper::mapCorrectedRectToRaw(int32_t *rects, int rectCount, int32_t coords[4] = { rects[i], rects[i + 1], - rects[i] + rects[i + 2], - rects[i + 1] + rects[i + 3] + rects[i] + rects[i + 2] - 1, + rects[i + 1] + rects[i + 3] - 1 }; mapCorrectedToRaw(coords, 2, clamp, simple); @@ -409,8 +409,8 @@ status_t DistortionMapper::mapCorrectedRectToRaw(int32_t *rects, int rectCount, // Map back to (l, t, width, height) rects[i] = coords[0]; rects[i + 1] = coords[1]; - rects[i + 2] = coords[2] - coords[0]; - rects[i + 3] = coords[3] - coords[1]; + rects[i + 2] = coords[2] - coords[0] + 1; + rects[i + 3] = coords[3] - coords[1] + 1; } return OK; diff --git a/services/camera/libcameraservice/tests/DistortionMapperTest.cpp b/services/camera/libcameraservice/tests/DistortionMapperTest.cpp index 2a689c6bb3..54935c9485 100644 --- a/services/camera/libcameraservice/tests/DistortionMapperTest.cpp +++ b/services/camera/libcameraservice/tests/DistortionMapperTest.cpp @@ -167,6 +167,30 @@ TEST(DistortionMapperTest, IdentityTransform) { } } +TEST(DistortionMapperTest, ClampConsistency) { + status_t res; + + std::array activeArray = {0, 0, 4032, 3024}; + DistortionMapper m; + setupTestMapper(&m, identityDistortion, testICal, /*activeArray*/ activeArray.data(), + /*preCorrectionActiveArray*/ activeArray.data()); + + auto rectsOrig = activeArray; + res = m.mapCorrectedRectToRaw(activeArray.data(), 1, /*clamp*/true, /*simple*/ true); + ASSERT_EQ(res, OK); + + for (size_t i = 0; i < activeArray.size(); i++) { + EXPECT_EQ(activeArray[i], rectsOrig[i]); + } + + res = m.mapRawRectToCorrected(activeArray.data(), 1, /*clamp*/true, /*simple*/ true); + ASSERT_EQ(res, OK); + + for (size_t i = 0; i < activeArray.size(); i++) { + EXPECT_EQ(activeArray[i], rectsOrig[i]); + } +} + TEST(DistortionMapperTest, SimpleTransform) { status_t res;