diff options
author | Lajos Molnar <lajos@google.com> | 2014-07-14 12:24:56 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2014-07-15 02:30:32 +0000 |
commit | 7be24522ce2e1821ad45e7ada7c3f91e6814889a (patch) | |
tree | 4a2525d0705a05f0993eb42fb437df042b899e3a /media/jni/android_media_MediaExtractor.cpp | |
parent | be1da5e5ccc626e3f24e55205f0d6edea33bd3d7 (diff) | |
download | frameworks_base-7be24522ce2e1821ad45e7ada7c3f91e6814889a.zip frameworks_base-7be24522ce2e1821ad45e7ada7c3f91e6814889a.tar.gz frameworks_base-7be24522ce2e1821ad45e7ada7c3f91e6814889a.tar.bz2 |
MediaExtractor: set buffer offset/limit in readSampleData
also fix setting offset/limit in MediaCodec's getBuffer.
Bug: 13008204
Change-Id: Iadf0f006cfccc2546971cc5384058e1a2721780b
Diffstat (limited to 'media/jni/android_media_MediaExtractor.cpp')
-rw-r--r-- | media/jni/android_media_MediaExtractor.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index 3dbf77b..52e9910 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -36,6 +36,8 @@ #include <media/stagefright/MetaData.h> #include <media/stagefright/NuMediaExtractor.h> +#include <nativehelper/ScopedLocalRef.h> + #include "android_util_Binder.h" namespace android { @@ -206,12 +208,12 @@ status_t JMediaExtractor::readSampleData( size_t dstSize; jbyteArray byteArray = NULL; - if (dst == NULL) { - jclass byteBufClass = env->FindClass("java/nio/ByteBuffer"); - CHECK(byteBufClass != NULL); + ScopedLocalRef<jclass> byteBufClass(env, env->FindClass("java/nio/ByteBuffer")); + CHECK(byteBufClass.get() != NULL); + if (dst == NULL) { jmethodID arrayID = - env->GetMethodID(byteBufClass, "array", "()[B"); + env->GetMethodID(byteBufClass.get(), "array", "()[B"); CHECK(arrayID != NULL); byteArray = @@ -251,6 +253,24 @@ status_t JMediaExtractor::readSampleData( *sampleSize = buffer->size(); + jmethodID positionID = env->GetMethodID( + byteBufClass.get(), "position", "(I)Ljava/nio/Buffer;"); + + CHECK(positionID != NULL); + + jmethodID limitID = env->GetMethodID( + byteBufClass.get(), "limit", "(I)Ljava/nio/Buffer;"); + + CHECK(limitID != NULL); + + jobject me = env->CallObjectMethod( + byteBuf, limitID, offset + *sampleSize); + env->DeleteLocalRef(me); + me = env->CallObjectMethod( + byteBuf, positionID, offset); + env->DeleteLocalRef(me); + me = NULL; + return OK; } |