summaryrefslogtreecommitdiff
path: root/libs/hwui/Readback.cpp
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2021-07-14 14:24:51 -0400
committer John Reck <jreck@google.com> 2021-07-15 18:48:20 +0000
commitf13447030dbeb2ce48bd421bc01c89cc01e19667 (patch)
tree1e39186558a30e2cec3b53acd99eaf72f28b74ac /libs/hwui/Readback.cpp
parent245ce4d049dc454ec01dbcf0200d0d55e9d9f476 (diff)
Avoid sampling outside BQ crop rect
The region outside of the BQ crop rect is potentially garbage. Avoid sampling from it. Fixes: 189656466 Bug: 193378020 Test: CTS PixelCopyTests & DecodeAccuracyTest Change-Id: I2910d93471f08aaf807ac9f87fdf84cf29cf4143 Merged-In: I2910d93471f08aaf807ac9f87fdf84cf29cf4143
Diffstat (limited to 'libs/hwui/Readback.cpp')
-rw-r--r--libs/hwui/Readback.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp
index 25d57f61654d..e08b99d52cdb 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -189,8 +189,10 @@ CopyResult Readback::copySurfaceInto(ANativeWindow* window, const Rect& inSrcRec
if (srcRect.width() != bitmap->width() || srcRect.height() != bitmap->height()) {
paint.setFilterQuality(kLow_SkFilterQuality);
}
- canvas->drawImageRect(image, imageSrcRect, imageDstRect, &paint,
- SkCanvas::kFast_SrcRectConstraint);
+ const bool hasBufferCrop = cropRect.left < cropRect.right && cropRect.top < cropRect.bottom;
+ auto constraint =
+ hasBufferCrop ? SkCanvas::kStrict_SrcRectConstraint : SkCanvas::kFast_SrcRectConstraint;
+ canvas->drawImageRect(image, imageSrcRect, imageDstRect, &paint, constraint);
canvas->restore();
if (!tmpSurface->readPixels(*bitmap, 0, 0)) {