diff options
Diffstat (limited to 'framesequence/src/android/support/rastermill/FrameSequence.java')
-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 |