summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andreas Huber <andih@google.com> 2012-05-08 14:32:23 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2012-05-08 14:32:23 -0700
commiteb194d5d3c84a71de82316618b845bcd1fde61ff (patch)
tree3608720e12b9b1885ee7a1ad03c0c0348f91f373
parent1d56afc6ace90e7cbd32d776b73173ef0dfa95c4 (diff)
parent3dd7fd08a8a1d658b0aac8590f1fd922e056f689 (diff)
Merge "Return codec buffers that are marked as having host endianness." into jb-dev
-rw-r--r--media/jni/android_media_MediaCodec.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index acd81e1d591e..e43e66e6363a 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -212,6 +212,25 @@ status_t JMediaCodec::getBuffers(
}
jclass byteBufferClass = env->FindClass("java/nio/ByteBuffer");
+ CHECK(byteBufferClass != NULL);
+
+ jmethodID orderID = env->GetMethodID(
+ byteBufferClass,
+ "order",
+ "(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;");
+
+ CHECK(orderID != NULL);
+
+ jclass byteOrderClass = env->FindClass("java/nio/ByteOrder");
+ CHECK(byteOrderClass != NULL);
+
+ jmethodID nativeOrderID = env->GetStaticMethodID(
+ byteOrderClass, "nativeOrder", "()Ljava/nio/ByteOrder;");
+ CHECK(nativeOrderID != NULL);
+
+ jobject nativeByteOrderObj =
+ env->CallStaticObjectMethod(byteOrderClass, nativeOrderID);
+ CHECK(nativeByteOrderObj != NULL);
*bufArray = (jobjectArray)env->NewObjectArray(
buffers.size(), byteBufferClass, NULL);
@@ -224,6 +243,11 @@ status_t JMediaCodec::getBuffers(
buffer->base(),
buffer->capacity());
+ jobject me = env->CallObjectMethod(
+ byteBuffer, orderID, nativeByteOrderObj);
+ env->DeleteLocalRef(me);
+ me = NULL;
+
env->SetObjectArrayElement(
*bufArray, i, byteBuffer);
@@ -231,6 +255,9 @@ status_t JMediaCodec::getBuffers(
byteBuffer = NULL;
}
+ env->DeleteLocalRef(nativeByteOrderObj);
+ nativeByteOrderObj = NULL;
+
return OK;
}