From 3dd7fd08a8a1d658b0aac8590f1fd922e056f689 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Tue, 8 May 2012 13:50:45 -0700 Subject: Return codec buffers that are marked as having host endianness. Change-Id: Iedfd829d108e65ee368909af14ace68b63e0e168 related-to-bug: 6364139 --- media/jni/android_media_MediaCodec.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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; } -- cgit v1.2.3-59-g8ed1b