summaryrefslogtreecommitdiffstats
path: root/media/jni/android_media_MediaExtractor.cpp
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2014-07-14 12:24:56 -0700
committerLajos Molnar <lajos@google.com>2014-07-15 02:30:32 +0000
commit7be24522ce2e1821ad45e7ada7c3f91e6814889a (patch)
tree4a2525d0705a05f0993eb42fb437df042b899e3a /media/jni/android_media_MediaExtractor.cpp
parentbe1da5e5ccc626e3f24e55205f0d6edea33bd3d7 (diff)
downloadframeworks_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.cpp28
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;
}