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
This commit is contained in:
parent
47a7dc81d0
commit
ec4cb38750
@ -901,14 +901,18 @@ Rect GLConsumer::getCurrentCrop() const {
|
|||||||
|
|
||||||
// The crop is too wide
|
// The crop is too wide
|
||||||
if (newWidth < currentWidth) {
|
if (newWidth < currentWidth) {
|
||||||
uint32_t dw = (currentWidth - newWidth) / 2;
|
uint32_t dw = currentWidth - newWidth;
|
||||||
outCrop.left += dw;
|
auto halfdw = dw / 2;
|
||||||
outCrop.right -= dw;
|
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
|
// The crop is too tall
|
||||||
} else if (newHeight < currentHeight) {
|
} else if (newHeight < currentHeight) {
|
||||||
uint32_t dh = (currentHeight - newHeight) / 2;
|
uint32_t dh = currentHeight - newHeight;
|
||||||
outCrop.top += dh;
|
auto halfdh = dh / 2;
|
||||||
outCrop.bottom -= dh;
|
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]",
|
GLC_LOGV("getCurrentCrop final crop [%d,%d,%d,%d]",
|
||||||
|
Loading…
Reference in New Issue
Block a user