summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Marco Nelissen <marcone@google.com> 2012-12-19 15:40:47 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2012-12-19 15:40:47 -0800
commiteca3eb5983fb8e8cea17175869f86cda7613dd60 (patch)
treede6569d0288dc5c2f3efc2edc65487ea8920882b
parent6465b03fff97f9982b38d80e56b224acfebd39bb (diff)
parentcbbea8e651feb580f439e28359d72589709fb120 (diff)
Merge "Don't create weird ByteBuffers"
-rw-r--r--media/jni/android_media_MediaCodec.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index 8740c0854d63..f8c945b1b5c3 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -237,15 +237,27 @@ status_t JMediaCodec::getBuffers(
*bufArray = (jobjectArray)env->NewObjectArray(
buffers.size(), byteBufferClass, NULL);
+ if (*bufArray == NULL) {
+ env->DeleteLocalRef(nativeByteOrderObj);
+ return NO_MEMORY;
+ }
for (size_t i = 0; i < buffers.size(); ++i) {
const sp<ABuffer> &buffer = buffers.itemAt(i);
+ // if this is an ABuffer that doesn't actually hold any accessible memory,
+ // use a null ByteBuffer
+ if (buffer->base() == NULL) {
+ continue;
+ }
jobject byteBuffer =
env->NewDirectByteBuffer(
buffer->base(),
buffer->capacity());
-
+ if (byteBuffer == NULL) {
+ env->DeleteLocalRef(nativeByteOrderObj);
+ return NO_MEMORY;
+ }
jobject me = env->CallObjectMethod(
byteBuffer, orderID, nativeByteOrderObj);
env->DeleteLocalRef(me);
@@ -715,7 +727,10 @@ static jobjectArray android_media_MediaCodec_getBuffers(
return buffers;
}
- throwExceptionAsNecessary(env, err);
+ // if we're out of memory, an exception was already thrown
+ if (err != NO_MEMORY) {
+ throwExceptionAsNecessary(env, err);
+ }
return NULL;
}