From 461f3cf303bf9935b19c95cad53ba7a931de83e3 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Fri, 19 Apr 2019 12:19:01 -0700 Subject: [PATCH] DngCreator: Assume square pixel centered at (x+0.5, y+0.5) Example 1: active_array_size: 3 x 3, optical center: (1.5, 1.5), normalized optical center: (0.5, 0.5) Example 2: active_array_size: 2 * 2, optical center: (1, 1), normalized optical center: (0.5, 0.5) This reverts commit 47849abc2df30a01d89659f14ff8d2fe1c7620b8. Test: DngCreatorTest Bug: 119566614 Change-Id: Id3177d2056bc83a73ee1a32de0b74d51161ab56b --- core/jni/android_hardware_camera2_DngCreator.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/jni/android_hardware_camera2_DngCreator.cpp b/core/jni/android_hardware_camera2_DngCreator.cpp index 7052ed613591d..4fad239b57438 100644 --- a/core/jni/android_hardware_camera2_DngCreator.cpp +++ b/core/jni/android_hardware_camera2_DngCreator.cpp @@ -1010,9 +1010,10 @@ static inline bool unDistortWithinPreCorrArray( const float cx, const float cy, const float f, const int preCorrW, const int preCorrH, const int xMin, const int yMin) { undistort(x, y, distortion, cx, cy, f); - int xMax = xMin + preCorrW - 1; - int yMax = yMin + preCorrH - 1; - if (x < xMin || y < yMin || x > xMax || y > yMax) { + // xMin and yMin are inclusive, and xMax and yMax are exclusive. + int xMax = xMin + preCorrW; + int yMax = yMin + preCorrH; + if (x < xMin || y < yMin || x >= xMax || y >= yMax) { return false; } return true; @@ -1976,7 +1977,6 @@ static sp DngCreator_setup(JNIEnv* env, jobject thiz, uint32_t image if (entry3.count == 5) { gotDistortion = true; - // Scale the distortion coefficients to create a zoom in warpped image so that all // pixels are drawn within input image. for (size_t i = 0; i < entry3.count; i++) { @@ -1995,8 +1995,8 @@ static sp DngCreator_setup(JNIEnv* env, jobject thiz, uint32_t image preXMin, preYMin); } - float m_x = std::fmaxf(preWidth-1 - cx, cx); - float m_y = std::fmaxf(preHeight-1 - cy, cy); + float m_x = std::fmaxf(preWidth - cx, cx); + float m_y = std::fmaxf(preHeight - cy, cy); float m_sq = m_x*m_x + m_y*m_y; float m = sqrtf(m_sq); // distance to farthest corner from optical center float f_sq = f * f;