From 5835157d762a5b6bffe3d892c588ebc475bccb44 Mon Sep 17 00:00:00 2001 From: John Reck Date: Mon, 9 Sep 2013 16:37:57 -0700 Subject: Remove FD optimization case for decodeStream Bug: 10677727 The problem is that the FileInputStream may be wrapping a pipe or AssetFileDescriptor which fails if handed to decodeFileDescriptor. The problem is that AFDs can start in the middle of a file, whereas decodeFileDescriptor assumes it can mmap() the FD and start at the beginning. Change-Id: I98a3c5f789865145e25a99b32d205e290808c1cf --- graphics/java/android/graphics/BitmapFactory.java | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java index e3adc59..23606a1 100644 --- a/graphics/java/android/graphics/BitmapFactory.java +++ b/graphics/java/android/graphics/BitmapFactory.java @@ -565,24 +565,10 @@ public class BitmapFactory { Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap"); try { - boolean decodeGenericStream = true; if (is instanceof AssetManager.AssetInputStream) { final int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); bm = nativeDecodeAsset(asset, outPadding, opts); - // Do not follow the normal case. - decodeGenericStream = false; - } else if (is instanceof FileInputStream) { - try { - FileDescriptor fd = ((FileInputStream) is).getFD(); - // decodeFileDescriptor will take care of throwing the IAE and - // calling setDensityFromOptions. - return decodeFileDescriptor(fd, outPadding, opts); - } catch (IOException e) { - // Fall through to nativeDecodeStream. - } - } - - if (decodeGenericStream) { + } else { byte [] tempStorage = null; if (opts != null) tempStorage = opts.inTempStorage; if (tempStorage == null) tempStorage = new byte[DECODE_BUFFER_SIZE]; -- cgit v1.1