summaryrefslogtreecommitdiffstats
path: root/framesequence/jni/FrameSequenceJNI.cpp
diff options
context:
space:
mode:
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