summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2021-07-14 14:24:51 -0400
committerJohn Reck <jreck@google.com>2021-07-14 14:26:14 -0400
commit0f284da9239a11e5c23c22222ccdc5babcbd0f7d (patch)
treef0170a97adba80c67ff6d158879e22f41ff1fdac
parentab7b0e89918d8db03830378d5520076cd0a2b970 (diff)
downloadbase-0f284da9239a11e5c23c22222ccdc5babcbd0f7d.tar.gz
Avoid sampling outside BQ crop rect
The region outside of the BQ crop rect is potentially garbage. Avoid sampling from it. Fixes: 189656466 Test: CTS PixelCopyTests & DecodeAccuracyTest Change-Id: I2910d93471f08aaf807ac9f87fdf84cf29cf4143
-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 d8735ce57b65..a743d30939d0 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -183,8 +183,10 @@ CopyResult Readback::copySurfaceInto(ANativeWindow* window, const Rect& inSrcRec
SkPaint paint;
paint.setAlpha(255);
paint.setBlendMode(SkBlendMode::kSrc);
- canvas->drawImageRect(image, imageSrcRect, imageDstRect, sampling, &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, sampling, &paint, constraint);
canvas->restore();
if (!tmpSurface->readPixels(*bitmap, 0, 0)) {