diff options
| author | 2016-08-09 11:54:08 +0900 | |
|---|---|---|
| committer | 2016-08-09 13:18:22 +0900 | |
| commit | e6e4e8d7a5f8055f6a11b24866feebbab57c9b4e (patch) | |
| tree | b3767286f86d6e326533d961efd259a532c746e5 | |
| parent | 043785660ca6450c96408377fe563f627d036353 (diff) | |
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
| -rw-r--r-- | media/java/android/media/ExifInterface.java | 31 |
1 files 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); } } |