diff options
| author | Chien-Yu Chen <cychen@google.com> | 2015-07-07 22:16:08 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-07 22:16:10 +0000 |
| commit | 69421363c6a81a788b963d2f4cb5fdeaa8bd4200 (patch) | |
| tree | c8d0cf2f82e0a07730a5966fda33474a2d059176 /media/jni | |
| parent | 7a64e9769f8fe5a400320de9ebd025b0b7af045d (diff) | |
| parent | e0ee63046ad062040aafc977585fb461a2acf666 (diff) | |
| download | frameworks_base-69421363c6a81a788b963d2f4cb5fdeaa8bd4200.zip frameworks_base-69421363c6a81a788b963d2f4cb5fdeaa8bd4200.tar.gz frameworks_base-69421363c6a81a788b963d2f4cb5fdeaa8bd4200.tar.bz2 | |
Merge "ImageWriter: Exception when Surface is abandoned" into mnc-dev
Diffstat (limited to 'media/jni')
| -rw-r--r-- | media/jni/android_media_ImageWriter.cpp | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp index ba7634c..f92a8ef 100644 --- a/media/jni/android_media_ImageWriter.cpp +++ b/media/jni/android_media_ImageWriter.cpp @@ -338,9 +338,16 @@ static void ImageWriter_dequeueImage(JNIEnv* env, jobject thiz, jlong nativeCtx, int fenceFd = -1; status_t res = anw->dequeueBuffer(anw.get(), &anb, &fenceFd); if (res != OK) { - // TODO: handle different error cases here. ALOGE("%s: Dequeue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res); - jniThrowRuntimeException(env, "dequeue buffer failed"); + switch (res) { + case NO_INIT: + jniThrowException(env, "java/lang/IllegalStateException", + "Surface has been abandoned"); + break; + default: + // TODO: handle other error cases here. + jniThrowRuntimeException(env, "dequeue buffer failed"); + } return; } // New GraphicBuffer object doesn't own the handle, thus the native buffer @@ -468,7 +475,16 @@ static void ImageWriter_queueImage(JNIEnv* env, jobject thiz, jlong nativeCtx, j // Finally, queue input buffer res = anw->queueBuffer(anw.get(), buffer, fenceFd); if (res != OK) { - jniThrowRuntimeException(env, "Queue input buffer failed"); + ALOGE("%s: Queue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res); + switch (res) { + case NO_INIT: + jniThrowException(env, "java/lang/IllegalStateException", + "Surface has been abandoned"); + break; + default: + // TODO: handle other error cases here. + jniThrowRuntimeException(env, "Queue input buffer failed"); + } return; } @@ -514,9 +530,16 @@ static jint ImageWriter_attachAndQueueImage(JNIEnv* env, jobject thiz, jlong nat // Step 1. Attach Image res = surface->attachBuffer(opaqueBuffer->mGraphicBuffer.get()); if (res != OK) { - // TODO: handle different error case separately. ALOGE("Attach image failed: %s (%d)", strerror(-res), res); - jniThrowRuntimeException(env, "nativeAttachImage failed!!!"); + switch (res) { + case NO_INIT: + jniThrowException(env, "java/lang/IllegalStateException", + "Surface has been abandoned"); + break; + default: + // TODO: handle other error cases here. + jniThrowRuntimeException(env, "nativeAttachImage failed!!!"); + } return res; } sp < ANativeWindow > anw = surface; @@ -545,7 +568,16 @@ static jint ImageWriter_attachAndQueueImage(JNIEnv* env, jobject thiz, jlong nat res = anw->queueBuffer(anw.get(), opaqueBuffer->mGraphicBuffer.get(), /*fenceFd*/ -1); if (res != OK) { - jniThrowRuntimeException(env, "Queue input buffer failed"); + ALOGE("%s: Queue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res); + switch (res) { + case NO_INIT: + jniThrowException(env, "java/lang/IllegalStateException", + "Surface has been abandoned"); + break; + default: + // TODO: handle other error cases here. + jniThrowRuntimeException(env, "Queue input buffer failed"); + } return res; } |
