summaryrefslogtreecommitdiff
path: root/graphics/java
diff options
context:
space:
mode:
authorLeon Scroggins III <scroggo@google.com>2020-09-10 14:57:11 -0400
committerLeon Scroggins <scroggo@google.com>2020-09-15 15:52:38 +0000
commitd172a0cff8b7b3a4332d5992a87c5e3ab1784174 (patch)
tree1d2ea8e5001c7bf70f2cd608433a130ba420d4e1 /graphics/java
parentfc6fbde5dfaf9690251a8a399d627c45ac03f7cd (diff)
ImageDecoder: Use AssetFileDescriptor's length
Bug: 166069819 Test: ImageDecoderTest (cts) The contained asset may only be a subset of the AssetFileDescriptor. SkWebpCodec reads the entire stream into a contiguous block of memory. (This is because libwebp does not provide a streaming API for creating its demuxer.) If the AssetFileDescriptor contains data after the webp file, this wastes memory. In some cases, there may be a *lot* of data after the webp file, so this can use too much memory, particularly on low memory devices. Merged-In: I8d8e520f43a7ef0d7e4534ef165d8c7e4d2a0b55 Change-Id: I8d8e520f43a7ef0d7e4534ef165d8c7e4d2a0b55
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/ImageDecoder.java6
1 files changed, 3 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index c8f065ad094c..71744eff8a56 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -308,7 +308,7 @@ public final class ImageDecoder implements AutoCloseable {
ImageDecoder decoder = null;
try {
- decoder = nCreate(fd, preferAnimation, source);
+ decoder = nCreate(fd, AssetFileDescriptor.UNKNOWN_LENGTH, preferAnimation, source);
} finally {
if (decoder == null) {
IoUtils.closeQuietly(stream);
@@ -356,7 +356,7 @@ public final class ImageDecoder implements AutoCloseable {
try {
try {
Os.lseek(fd, offset, SEEK_SET);
- decoder = nCreate(fd, preferAnimation, source);
+ decoder = nCreate(fd, assetFd.getDeclaredLength(), preferAnimation, source);
} catch (ErrnoException e) {
decoder = createFromStream(new FileInputStream(fd), true, preferAnimation, source);
}
@@ -1995,7 +1995,7 @@ public final class ImageDecoder implements AutoCloseable {
private static native ImageDecoder nCreate(InputStream is, byte[] storage,
boolean preferAnimation, Source src) throws IOException;
// The fd must be seekable.
- private static native ImageDecoder nCreate(FileDescriptor fd,
+ private static native ImageDecoder nCreate(FileDescriptor fd, long length,
boolean preferAnimation, Source src) throws IOException;
@NonNull
private static native Bitmap nDecodeBitmap(long nativePtr,