diff options
author | Chris Craik <ccraik@android.com> | 2015-04-02 22:25:47 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-04-02 22:25:48 +0000 |
commit | d90222baefb107ddc08d024b02d664d18f50f44f (patch) | |
tree | 83290b350f7b0e75a256d64d50a331b36b42f991 /framesequence/src/android/support/rastermill | |
parent | 46ca918db82c1fca3f370ec6a9b936bf7268aa85 (diff) | |
parent | 6a61141137c7a46d747aa611c9caf62436bc119f (diff) | |
download | android_frameworks_ex-d90222baefb107ddc08d024b02d664d18f50f44f.tar.gz android_frameworks_ex-d90222baefb107ddc08d024b02d664d18f50f44f.tar.bz2 android_frameworks_ex-d90222baefb107ddc08d024b02d664d18f50f44f.zip |
Merge "Adding Bytebuffer support to rastermill library"
Diffstat (limited to 'framesequence/src/android/support/rastermill')
-rw-r--r-- | framesequence/src/android/support/rastermill/FrameSequence.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/framesequence/src/android/support/rastermill/FrameSequence.java b/framesequence/src/android/support/rastermill/FrameSequence.java index d2bd128..8ff241f 100644 --- a/framesequence/src/android/support/rastermill/FrameSequence.java +++ b/framesequence/src/android/support/rastermill/FrameSequence.java @@ -17,6 +17,7 @@ package android.support.rastermill; import android.graphics.Bitmap; +import java.nio.ByteBuffer; import java.io.InputStream; @@ -40,6 +41,7 @@ public class FrameSequence { private static native FrameSequence nativeDecodeByteArray(byte[] data, int offset, int length); private static native FrameSequence nativeDecodeStream(InputStream is, byte[] tempStorage); + private static native FrameSequence nativeDecodeByteBuffer(ByteBuffer buffer, int offset, int capacity); private static native void nativeDestroyFrameSequence(long nativeFrameSequence); private static native long nativeCreateState(long nativeFrameSequence); private static native void nativeDestroyState(long nativeState); @@ -69,6 +71,19 @@ public class FrameSequence { return nativeDecodeByteArray(data, offset, length); } + public static FrameSequence decodeByteBuffer(ByteBuffer buffer) { + if (buffer == null) throw new IllegalArgumentException(); + if (!buffer.isDirect()) { + if (buffer.hasArray()) { + byte[] byteArray = buffer.array(); + return decodeByteArray(byteArray, buffer.position(), buffer.remaining()); + } else { + throw new IllegalArgumentException("Cannot have non-direct ByteBuffer with no byte array"); + } + } + return nativeDecodeByteBuffer(buffer, buffer.position(), buffer.remaining()); + } + public static FrameSequence decodeStream(InputStream stream) { if (stream == null) throw new IllegalArgumentException(); byte[] tempStorage = new byte[16 * 1024]; // TODO: use buffer pool |