From 5ea17442c59b23e0c2fa8cd0b1e85aef9db92d3b Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Mon, 27 Oct 2014 14:54:33 -0700 Subject: [PATCH] MediaCodec/Image: handle null cropRect correctly - allow Media.Image.setCropRect(null) to unset cropRect - use full image if cropRect is null in MediaCodec$Image Bug: 18124320 Change-Id: I7abb6175402a1fe913e16c0a682fabee79c55741 --- media/java/android/media/Image.java | 6 ++++-- media/java/android/media/MediaCodec.java | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/media/java/android/media/Image.java b/media/java/android/media/Image.java index 522e45d3b411c..0d6b91a7046ac 100644 --- a/media/java/android/media/Image.java +++ b/media/java/android/media/Image.java @@ -146,8 +146,10 @@ public abstract class Image implements AutoCloseable { * using coordinates in the largest-resolution plane. */ public void setCropRect(Rect cropRect) { - cropRect = new Rect(cropRect); // make a copy - cropRect.intersect(0, 0, getWidth(), getHeight()); + if (cropRect != null) { + cropRect = new Rect(cropRect); // make a copy + cropRect.intersect(0, 0, getWidth(), getHeight()); + } mCropRect = cropRect; } diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 420510a933698..bdd62f27703b9 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -1778,10 +1778,6 @@ final public class MediaCodec { mIsValid = true; mIsReadOnly = buffer.isReadOnly(); mBuffer = buffer.duplicate(); - if (cropRect != null) { - cropRect.offset(-xOffset, -yOffset); - } - super.setCropRect(cropRect); // save offsets and info mXOffset = xOffset; @@ -1833,6 +1829,12 @@ final public class MediaCodec { throw new UnsupportedOperationException( "unsupported info length: " + info.remaining()); } + + if (cropRect == null) { + cropRect = new Rect(0, 0, mWidth, mHeight); + } + cropRect.offset(-xOffset, -yOffset); + super.setCropRect(cropRect); } private class MediaPlane extends Plane {