summaryrefslogtreecommitdiffstats
path: root/framesequence/src/android/support/rastermill/FrameSequence.java
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2015-04-01 14:54:12 -0700
committerChris Craik <ccraik@google.com>2015-04-01 14:54:12 -0700
commit6a61141137c7a46d747aa611c9caf62436bc119f (patch)
tree83290b350f7b0e75a256d64d50a331b36b42f991 /framesequence/src/android/support/rastermill/FrameSequence.java
parent46ca918db82c1fca3f370ec6a9b936bf7268aa85 (diff)
downloadandroid_frameworks_ex-6a61141137c7a46d747aa611c9caf62436bc119f.tar.gz
android_frameworks_ex-6a61141137c7a46d747aa611c9caf62436bc119f.tar.bz2
android_frameworks_ex-6a61141137c7a46d747aa611c9caf62436bc119f.zip
Adding Bytebuffer support to rastermill library
Change-Id: Ifedaeaec49caffa5add357246ff43e2b870949f0
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