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/jni/FrameSequenceJNI.cpp | |
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/jni/FrameSequenceJNI.cpp')
-rw-r--r-- | framesequence/jni/FrameSequenceJNI.cpp | 25 |
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 |