summaryrefslogtreecommitdiffstats
path: root/framesequence/jni/FrameSequenceJNI.cpp
diff options
context:
space:
mode:
authorChris Craik <ccraik@android.com>2015-04-02 22:25:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-02 22:25:48 +0000
commitd90222baefb107ddc08d024b02d664d18f50f44f (patch)
tree83290b350f7b0e75a256d64d50a331b36b42f991 /framesequence/jni/FrameSequenceJNI.cpp
parent46ca918db82c1fca3f370ec6a9b936bf7268aa85 (diff)
parent6a61141137c7a46d747aa611c9caf62436bc119f (diff)
downloadandroid_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/jni/FrameSequenceJNI.cpp')
-rw-r--r--framesequence/jni/FrameSequenceJNI.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/framesequence/jni/FrameSequenceJNI.cpp b/framesequence/jni/FrameSequenceJNI.cpp
index 08a73bc..dfc51ec 100644
--- a/framesequence/jni/FrameSequenceJNI.cpp
+++ b/framesequence/jni/FrameSequenceJNI.cpp
@@ -53,12 +53,27 @@ static jobject nativeDecodeByteArray(JNIEnv* env, jobject clazz,
"couldn't read array bytes");
return NULL;
}
- MemoryStream stream(bytes + offset, length);
+ MemoryStream stream(bytes + offset, length, NULL);
FrameSequence* frameSequence = FrameSequence::create(&stream);
env->ReleasePrimitiveArrayCritical(byteArray, bytes, 0);
return createJavaFrameSequence(env, frameSequence);
}
+static jobject nativeDecodeByteBuffer(JNIEnv* env, jobject clazz,
+ jobject buf, jint offset, jint limit) {
+ jobject globalBuf = env->NewGlobalRef(buf);
+ JavaVM* vm;
+ env->GetJavaVM(&vm);
+ MemoryStream stream(
+ (reinterpret_cast<uint8_t*>(
+ env->GetDirectBufferAddress(globalBuf))) + offset,
+ limit,
+ globalBuf);
+ FrameSequence* frameSequence = FrameSequence::create(&stream);
+ jobject finalSequence = createJavaFrameSequence(env, frameSequence);
+ return finalSequence;
+}
+
static jobject nativeDecodeStream(JNIEnv* env, jobject clazz,
jobject istream, jbyteArray byteArray) {
JavaInputStream stream(env, istream, byteArray);
@@ -69,6 +84,10 @@ static jobject nativeDecodeStream(JNIEnv* env, jobject clazz,
static void nativeDestroyFrameSequence(JNIEnv* env, jobject clazz,
jlong frameSequenceLong) {
FrameSequence* frameSequence = reinterpret_cast<FrameSequence*>(frameSequenceLong);
+ jobject buf = frameSequence->getRawByteBuffer();
+ if (buf != NULL) {
+ env->DeleteGlobalRef(buf);
+ }
delete frameSequence;
}
@@ -123,6 +142,10 @@ static JNINativeMethod gMethods[] = {
"([BII)L" JNI_PACKAGE "/FrameSequence;",
(void*) nativeDecodeByteArray
},
+ { "nativeDecodeByteBuffer",
+ "(Ljava/nio/ByteBuffer;II)L" JNI_PACKAGE "/FrameSequence;",
+ (void*) nativeDecodeByteBuffer
+ },
{ "nativeDecodeStream",
"(Ljava/io/InputStream;[B)L" JNI_PACKAGE "/FrameSequence;",
(void*) nativeDecodeStream