summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dan Stoza <stoza@google.com> 2015-06-09 15:05:23 -0700
committer Dan Stoza <stoza@google.com> 2015-06-10 10:24:51 -0700
commitec4cb387502d5bd09e49b55605cf679fe3a0207a (patch)
tree31617b7e36c1288080d3c5d3a2746e3ab1c978f5
parent47a7dc81d0fedc1e85091f0e8a868768d0e8cadd (diff)
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
-rw-r--r--libs/gui/GLConsumer.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp
index 9fcac2dbed..757e08a907 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]",