diff options
| author | 2015-06-09 15:05:23 -0700 | |
|---|---|---|
| committer | 2015-06-10 10:24:51 -0700 | |
| commit | ec4cb387502d5bd09e49b55605cf679fe3a0207a (patch) | |
| tree | 31617b7e36c1288080d3c5d3a2746e3ab1c978f5 | |
| parent | 47a7dc81d0fedc1e85091f0e8a868768d0e8cadd (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.cpp | 16 |
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]", |