summaryrefslogtreecommitdiffstats
path: root/framesequence/src/android/support/rastermill/FrameSequence.java
diff options
context:
space:
mode:
Diffstat (limited to 'framesequence/src/android/support/rastermill/FrameSequence.java')
-rw-r--r--framesequence/src/android/support/rastermill/FrameSequence.java15
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