From ec4cb387502d5bd09e49b55605cf679fe3a0207a Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Tue, 9 Jun 2015 15:05:23 -0700 Subject: [PATCH] GLConsumer: Fix crop math When we have excess pixels that need to be removed from (for example) the left and right sides, we currently do something like: left += excess / 2; right -= excess / 2; If excess is odd, however, this removes 1 too few pixels since the odd pixel gets rounded down twice. This changes the math to effectively: left += excess / 2; right -= (excess - excess / 2); Which removes the correct total number of pixels. Bug: 19611086 Change-Id: I8d1ad9fe7ba67c149794c148663d12acbccccef0 --- libs/gui/GLConsumer.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp index 9fcac2dbe..757e08a90 100644 --- a/libs/gui/GLConsumer.cpp +++ b/libs/gui/GLConsumer.cpp @@ -901,14 +901,18 @@ Rect GLConsumer::getCurrentCrop() const { // The crop is too wide if (newWidth < currentWidth) { - uint32_t dw = (currentWidth - newWidth) / 2; - outCrop.left += dw; - outCrop.right -= dw; + uint32_t dw = currentWidth - newWidth; + auto halfdw = dw / 2; + outCrop.left += halfdw; + // Not halfdw because it would subtract 1 too few when dw is odd + outCrop.right -= (dw - halfdw); // The crop is too tall } else if (newHeight < currentHeight) { - uint32_t dh = (currentHeight - newHeight) / 2; - outCrop.top += dh; - outCrop.bottom -= dh; + uint32_t dh = currentHeight - newHeight; + auto halfdh = dh / 2; + outCrop.top += halfdh; + // Not halfdh because it would subtract 1 too few when dh is odd + outCrop.bottom -= (dh - halfdh); } GLC_LOGV("getCurrentCrop final crop [%d,%d,%d,%d]",