Merge "Account for crop in checksums" into qt-dev
am: 089d89c404
Change-Id: Iefbfef8d7cbf391e3c2e6de2bededf6bfa11bcea
diff --git a/common/device-side/util-axt/src/com/android/compatibility/common/util/MediaUtils.java b/common/device-side/util-axt/src/com/android/compatibility/common/util/MediaUtils.java
index 772009d..c01efd2 100644
--- a/common/device-side/util-axt/src/com/android/compatibility/common/util/MediaUtils.java
+++ b/common/device-side/util-axt/src/com/android/compatibility/common/util/MediaUtils.java
@@ -20,6 +20,7 @@
import android.drm.DrmConvertedStatus;
import android.drm.DrmManagerClient;
import android.graphics.ImageFormat;
+import android.graphics.Rect;
import android.media.Image;
import android.media.Image.Plane;
import android.media.MediaCodec;
@@ -1168,36 +1169,46 @@
MessageDigest md = MessageDigest.getInstance("MD5");
- int imageWidth = image.getWidth();
- int imageHeight = image.getHeight();
+ Rect crop = image.getCropRect();
+ int cropLeft = crop.left;
+ int cropRight = crop.right;
+ int cropTop = crop.top;
+ int cropBottom = crop.bottom;
+
+ int imageWidth = cropRight - cropLeft;
+ int imageHeight = cropBottom - cropTop;
Image.Plane[] planes = image.getPlanes();
for (int i = 0; i < planes.length; ++i) {
ByteBuffer buf = planes[i].getBuffer();
- int width, height, rowStride, pixelStride, x, y;
+ int width, height, rowStride, pixelStride, x, y, top, left;
rowStride = planes[i].getRowStride();
pixelStride = planes[i].getPixelStride();
if (i == 0) {
width = imageWidth;
height = imageHeight;
+ left = cropLeft;
+ top = cropTop;
} else {
width = imageWidth / 2;
height = imageHeight /2;
+ left = cropLeft / 2;
+ top = cropTop / 2;
}
// local contiguous pixel buffer
byte[] bb = new byte[width * height];
if (buf.hasArray()) {
byte b[] = buf.array();
- int offs = buf.arrayOffset();
+ int offs = buf.arrayOffset() + left * pixelStride;
if (pixelStride == 1) {
for (y = 0; y < height; ++y) {
- System.arraycopy(bb, y * width, b, y * rowStride + offs, width);
+ System.arraycopy(bb, y * width, b, (top + y) * rowStride + offs, width);
}
} else {
// do it pixel-by-pixel
for (y = 0; y < height; ++y) {
- int lineOffset = offs + y * rowStride;
+ int lineOffset = offs + (top + y) * rowStride;
for (x = 0; x < width; ++x) {
bb[y * width + x] = b[lineOffset + x * pixelStride];
}
@@ -1207,7 +1218,7 @@
int pos = buf.position();
if (pixelStride == 1) {
for (y = 0; y < height; ++y) {
- buf.position(pos + y * rowStride);
+ buf.position(pos + left + (top + y) * rowStride);
buf.get(bb, y * width, width);
}
} else {
@@ -1215,7 +1226,7 @@
byte[] lb = new byte[rowStride];
// do it pixel-by-pixel
for (y = 0; y < height; ++y) {
- buf.position(pos + y * rowStride);
+ buf.position(pos + left * pixelStride + (top + y) * rowStride);
// we're only guaranteed to have pixelStride * (width - 1) + 1 bytes
buf.get(lb, 0, pixelStride * (width - 1) + 1);
for (x = 0; x < width; ++x) {