For storing pointers, long is used in BitmapRegionDecoder
class, as native pointers can be 64-bit.
In addition, some minor changes have been done
to conform with standard JNI practice (e.g. use
of jint instead of int in JNI function prototypes)
In addition, Graphics.cpp has been changed to work
with modified BitmapRegionDecoder.
Change-Id: Id54087dd3bfb29577e8b762e70946793369dc701
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
The current stream wrapper returns a potentially incorrect
value for a call to getLength(), is typically copied into
another stream (not always in the same way), and doesn't
always take advantage of its underlying data (like when it
is an Asset). The overall goal of this CL is to provide the
caller with something that is ready to use, depending on
what is asked for. If a copy is desired, the copy is made
before being returned to the caller.
core/jni/android/graphics/Bitmap.cpp:
Include SkStream.h, since it is no longer included by
CreateJavaOutputStreamAdaptor's header file.
core/jni/android/graphics/BitmapFactory.cpp:
Pass an SkStreamRewindable to decoding functions, as Skia
decoders will be updated to only take an SkStreamRewindable
(which makes more sense because they require rewinding).
Call the more specific GetRewindableStream to get a
rewindable stream.
Remove copyAssetToStream which has been moved to Utils.
In nativeDecodeAsset, pass forcePurgeable as allowPurgeable
in doDecode. Technically the old code worked, but it checked
the BitmapOptions again.
Remove getFDSize, which is no longer used.
core/jni/android/graphics/BitmapRegionDecoder.cpp:
Remove redundant buildSkMemoryStream. nativeNewInstanceFromStream
now calls CopyJavaInputStream, which handles the copy.
Copy the Asset directly, using common code, rather than creating
an AssetStreamAdaptor to copy.
core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp:
core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h:
Provide new interfaces to access data from a Java InputStream.
The new interfaces are more specific about what type of stream
is desired.
Use forward declarations where possible.
Remove doSize, which gives a misleading answer to the question
of how long the entire stream is.
TODO: Only call FindClass etc once.
core/jni/android/graphics/Movie.cpp:
Check for an asset stream, and use it if possible. Then call
GetRewindableStream if there is not an asset.
Remove the memory leak. Call DeleteLocalRef to delete the
allocated memory.
core/jni/android/graphics/Picture.cpp:
Call the new interface.
core/jni/android/graphics/Utils.cpp:
core/jni/android/graphics/Utils.h:
Make AssetStreamAdaptor inherit from SkStreamRewindable so it
can be passed to Skia decoding functions once they require it.
Add CopyAssetToStream (moved from BitmapFactory.cpp) so it can
be used by multiple files.
graphics/java/android/graphics/BitmapFactory.java:
Remove the call to mark, which is now done natively.
Remove the BufferedInputStream. Mark/reset is now handled
by native code.
Allow decodeStream to handle a FileInputStream by using the
FileDescriptor, if it is seekable. In decodeFileDescriptor,
call nativeDecodeStream instead of decodeStream so this new
functionality will not loop.
Call setDensityFromOptions in decodeFileDescriptor.
graphics/java/android/graphics/BitmapRegionDecoder.java:
Remove the BufferedInputStream. Mark/reset is now handled
by native code.
TODO: ADD TESTS!
Requires https://googleplex-android-review.googlesource.com/#/c/344317/
BUG=https://b.corp.google.com/issue?id=8432093
Change-Id: I4419b70b3482325c98ecc673dbfc4613f1b18581
This prevents issues where one thread recycles the decoder while another
thread is in the process of checking the decoder's status or in the process
of decoding a region.
bug: 6880937
Change-Id: I7f755bf2149d03594e528ca79c536713b1447a55
1. Rename LargeBitmap to BitmapRegionDecoder
2. Move the instantiations of BitmapRegionDecoder out of BitmapFactory.
3. Remove the use of MemoryFile in BitmapRegionDecoder, since MemoryFile's API had been modified in master. Otherwise, the change will break the master build.
4. Move AssetStreamAdaptor, AutoFDSeek and nullObjectReturn to Utils.h because BitmapFactory.cpp and BitmapRegionDecoder.cpp both need to use these utility functions.
Most of the modifications, except for (2) and (3), were reviewed in https://android-git.corp.google.com/g/#change,64716 .
However, that change broke the master build due to (3) and was reverted eventually.
So, instead of withdrawing this change and waiting for that change to be checked in again, I merge the two changes into one.
Change-Id: I2202c0fbbbd6d6676bbd9637e690023ea4099c40
Move AssetStreamAdaptor, AutoFDSeek and nullObjectReturn to Utils.h because
BitmapFactory.cpp and BitmapRegionDecoder.cpp both need to use these utility functions.
Change-Id: I3e60c7fe4abd0289e1384e69a08fd20fe6fb0e10