diff options
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 |