From e6e4e8d7a5f8055f6a11b24866feebbab57c9b4e Mon Sep 17 00:00:00 2001 From: Jin Park Date: Tue, 9 Aug 2016 11:54:08 +0900 Subject: ExifInterface: Fix function for image size update Existing code assumes that the primary image data is correctly placed. Since this may be a mistaken assumption, this CL checks the NewSubfilType value and updates the image size values only if the tag value equals the original resolution image. Bug: 29409358 Change-Id: I51cffba870ee29d76118b4c8b72290d1010c6462 --- media/java/android/media/ExifInterface.java | 31 ++++++++++++++++++----------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index b675afe70199..ff4cfc06167f 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -3240,20 +3240,27 @@ public class ExifInterface { } } else { // Update for JPEG image - if (imageType == IFD_TIFF_HINT) { - ExifAttribute pixelXDimAttribute = - (ExifAttribute) mAttributes[IFD_EXIF_HINT].get(TAG_PIXEL_X_DIMENSION); - ExifAttribute pixelYDimAttribute = - (ExifAttribute) mAttributes[IFD_EXIF_HINT].get(TAG_PIXEL_Y_DIMENSION); - if (pixelXDimAttribute != null && pixelYDimAttribute != null) { - mAttributes[imageType].put(TAG_IMAGE_WIDTH, pixelXDimAttribute); - mAttributes[imageType].put(TAG_IMAGE_LENGTH, pixelYDimAttribute); - } else { - retrieveJpegImageSize(in, imageType); + ExifAttribute newSubfileTypeAttribute = + (ExifAttribute) mAttributes[imageType].get(TAG_NEW_SUBFILE_TYPE); + + if (newSubfileTypeAttribute != null) { + int newSubfileTypeValue = newSubfileTypeAttribute.getIntValue(mExifByteOrder); + + if (newSubfileTypeValue == ORIGINAL_RESOLUTION_IMAGE) { + // Update only for the primary image (OriginalResolutionImage) + ExifAttribute pixelXDimAttribute = + (ExifAttribute) mAttributes[IFD_EXIF_HINT].get(TAG_PIXEL_X_DIMENSION); + ExifAttribute pixelYDimAttribute = + (ExifAttribute) mAttributes[IFD_EXIF_HINT].get(TAG_PIXEL_Y_DIMENSION); + + if (pixelXDimAttribute != null && pixelYDimAttribute != null) { + mAttributes[imageType].put(TAG_IMAGE_WIDTH, pixelXDimAttribute); + mAttributes[imageType].put(TAG_IMAGE_LENGTH, pixelYDimAttribute); + return; + } } - } else { - retrieveJpegImageSize(in, imageType); } + retrieveJpegImageSize(in, imageType); } } -- cgit v1.2.3-59-g8ed1b